728x90
300x250

[C언어] main()함수의 인자 활용(명령행 인자 : argc, argv)

C언어 책을 보면 Argv, Argc라는 것이 구구절절 설명되어 있다. 이 부분이 설명되어 있는 영역의 주제는 대분류로 보자면 '함수'영역에 있으며 세부분류에 보면 'main()함수의 인자 활용'이라는 곳에 나오는 부분이다.
나는 먼저 인자라는 말을 '조건'이나 '발생하는 원인 요소'로 바꾸고 설명하겠다.

우리가 CUI를 올리든 GUI를 올리든 기본적으로 발생하는 함수의 조건은 main()이다.
main() 또한 역시나 요소(factor)가 존재한다. 그렇지만 main()함수는 구성하는 각각의 요소가 명확히 정해져 있지 않다.

선수 지식 : 포인터나 배열


1. main()함수를 구성하고 있는 요소가 명확하지 않는 이유는 무엇일까?

그 이유는 main()함수가 운영체제에 의해 실행되는 진입점 역할을 하므로 프로그램의 시작과 종료시 다양한 시스템에서의 운영 환경을 수용할 수 있도록 유연해야만 하기 때문이다.

오늘 실습은 main()함수의 인자 활용이라는 주제이기 때문에 argc, argv라는 함수를 활용하는 실습을 해보겠다.
main()함수에서 argc, argv에 대한 다음과 같은 형태의 원형을 지원한다.
int main(int argc, char *argv[]);

콘솔에서는 다음과 같이 사용된다.




2. Argc, Argv를 담고 있는 헤더는 무엇인가?

#include <stdlib.h>

용어 정리)
1. Argc는 무엇인가?
Argument Count
명령행 개수

2. Argv는 무엇인가?
Argument Vector
명령행 메모리 목록(배열)


3. Argc 단독 사용

#include <stdio.h>
#include <stdlib.h>

int main(int argc)
{

 printf("%d", argc);

}



태스트 결과


1번 : 'ch02_01' 입력했을 때?
출력값 : 1
2번 : 'ch02_01 ' 입력했을 때?
출력값 : 1
설명 : [0][0]은 기본값 ch02_01이므로 1
더불어 파일명이기 때문에 자신 스스로임
3번 : 'ch02_01 1' 입력했을 때?
출력값 : 2
설명 : [1][0]
4번 : 'ch02_01 12' 입력했을 때?
출력값 : 2
설명 : [1][0],[1][1]
5번 : 'ch02_01 12 ' 입력했을 떄?
출력값 : 2
설명 : [1][0], [1][1], [1][2]
빈칸은 \n으로 메모리 주소에 기억이 됩니다.
6번 : 'ch02_01 12 3' 입력했을 때?
출력값 : 3
설명 : [2][0]



4. Argc, Argv

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

 printf("[0][0]\n");
 printf("테스트 1번:%d %c\n", argc, argv[0][0]);

}



태스트 결과


설명 : [0][0]이므로 1개, c는 자기 자신(파일명)을 메모리에 주소로서 처리하고 있음.
예) [0][0] = c, [0][1] = h, [0][2] = 0

보충 설명 : char *argv[]를 char **argv로 쓸 수 있음.
포인터의 포인터(**)는 * 포인터의 주소를 저장하기 위해 사용.
배열로서 해석될 수 있는 영역임.


5. 참고) Argc, Argv, Env 활용


Env는 Environment의 약자로서 환경을 의미합니다.
환경설정 내용을 보기위해 사용하는 인자입니다.
main()함수에서 다음과 같은 형식의 원형으로 사용됩니다.

int main(int argc, char **argv, char **env)

소스

#include <stdio.h>

int main(int argc, char **argv, char **env)
{
 for(;env;env++)
  puts(*env);
}



태스트 결과

반응형

+ Recent posts