컴퓨터 프로그래밍/C

C언어 main 함수에게 인자 전달(argc, argv)

나노콛 2019. 7. 23. 11:22

메인 함수를 보면 int main(int argc, char* argv[])
이렇게 되어있는 것을 보셨을 겁니다.
argc argument count
argv argument vector
라고 하며 변수명은 변경되어도 상관없습니다.

 

#include <stdio.h>
int main(int argc, char* argv[])
{
	int i = 0;
	printf("전달된 문자열의 수 : %d \n", argc);

	for (i = 0; i < argc; i++)
	{
		printf("%d번째 문자열 : %s \n", i + 1, argv[i]);
	}

	return 0;
}

main 함수에 어떻게 인자를 전달할 수 있을까요

보통 함수의 호출은
Fuc(1,2);
이런 식으로 사용을 합니다.

main 함수는 프로그램의 실행 시작점이기 때문에
프로그램이 실행되기 전에 전달을 해야 하죠

그래서 cmd 창에서
(실행파일명).exe (인자) (인자) (인자) ....

이렇게 전달할 수 있습니다.


int argc는 전달된 인자의 개수입니다.
실행파일명이 test.exe라고 했을 때

test.exe hello hi 123
이런 식으로 입력을 했다고 한다면
test.exe 인자 개수 1 (실행파일도 인자로 침)
hello 인자 개수 2
hi 인자 개수 3
123 인자 개수 4

argc에는 4가 들어가게 됩니다.

int *argv[]는 인자로 전달한 내용이 저장되는 문자(포인터)열 배열입니다.
(문자열은 문자가 시작하는 주소를 가지고 있기때문에)

배열의 개수는 자동적으로 입력될 때 구분됩니다.
이러한 원리는
int array[] ={1,2,3,4,5} 이러면 자동적으로 배열의 크기가 5가 되듯
int * argv[]={"test.exe","hello","hi","123"}
(숫자도 문자열로 인식)
이렇게 된다고 보시면 됩니다.

그래서 인자의 개수가 많아도 상관없습니다.

비주얼 스튜디오 2015~2019를 사용하고 있다면
매번 cmd 창으로 가지 않고 인자 전달을 해볼 수 있는데요

해당 프로젝트 우 클릭 속성 - 디버깅 - 명령인 수

위와 같이 입력할 수 있습니다.
매번 직접 수정을 해야 합니다.


이 인자는 어떻게 응용할 수 있을까요?
리눅스 명령어를 하나 생각해 봅시다.
ls 목록 리스트를 보는 명령어입니다.
이 명령어 뒤의 인자로 리스트의 옵션이 달라질 수 있습니다.

ls -al 같이 말이죠

-al이 이런 인자입니다.
C언어에서도 실행파일 다음으로 이런 인자를 만들어서
어떤 인자가 들어왔을 때 어떠한 동작을 할 수 있게 구성을 할 수 있겠죠

728x90