Visual Studio/C 기초

int argc, char *argv[]

낙락장송s 2013. 10. 6. 16:03

C에선 명령 라인에서 프로그램으로 전달되는 인수를 사용할 필요가 있습니다. 명령 라인 인수는 프로그램을 실행할 때 프로그램의 이름 다음에 입력되는 값을 뜻합니다.

c:>프롬프트에서 PROGNAME이라는 프로그램을 실행한다고 가정합니다.

C:\>progname smith jones

2개의 명령 라인 인수인 smith와 jones는 프로그램이 실행되는 동안 읽어들일 수 있습니다. 이런 값은 프로그램의 main() 함수에 전달되는 인수로 생각할 수 있는데 명령 라인 인수는 프로그램이 실행되는 동안이 아니라 프로그램이 시작될 때 정보를 전달하는 역할을 하므로 가끔 매우 유용합니다.

원하는 만큼 많은 명령 라인 인수를 전달할 수 있습니다. 명령 라인 인수는 main() 함수에서만 읽어들일 수 있습니다.

 

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

첫 번째 인수 argc는 명령 라인 인수의 개수를 지정하는 정수형 변수입니다. 프로그램의 이름도 포함되므로 이 값은 항상 적어도 1이상입니다. 매개변수 argv[]는 문자열에 대한 포인터의 배열입니다. 이 배열에서 사용할 수 있는 첨자는 0부터 argc-1 까지 입니다.

포인터 argv[0]은 디렉터리 경로를 포함하는 프로그램의 이름을 지적하고, argv[1]은 프로그램의 이름 다음에 나타나는 첫 번째 인수를 지적합니다.

아, 그리고 명령 라인 인수를 받아들이기 위해 다른 변수 이름을 사용할 수는 있으나, 대개는 이 두 가지 이름 즉, argc, argv를 자주 사용하므로 그대로 사용하는 것이 좋습니다.

명령 라인 인수는 공백으로 구분 되는데요, 만약 공백을 포함하는 인수를 전달하기 원한다면 큰따옴표에 인수 전체를 포함시키면 됩니다.

c:\>progname smith "and jones"

여기서 smith는 argv[1]이 가리키는 첫 번째 인수, and jones는 argv[2]이 가리키는 두 번째 인수가 됩니다.

예제를 보겠습니다.

#include <stdio.h>

main(int argc, char *argv[])
{
 int count, a;
 printf("프로그램 이름 : %s\n", argv[0]);

 if(argc>1)
 {
  for(count=1;count<argc;count++)
   printf("인수 %d: %s\n", count, argv[count]);
 }
 else
  puts("명령 라인 인수가 없습니다.\n");
 puts("종료하시려면 아무 키나 입력하고 엔터를 눌러주세요");
 scanf("%d",&a);
}

명령 프롬프트를 열고 방금 코딩한 프로그램 이름과 명령 라인 인수를 입력하고 엔터를 누르면 다음과 같은 결과가 나옵니다.

첫 번째는 명령 라인 인수를 입력한 경우, 두 번째는 그냥 파일 이름만 입력했을 경우 입니다.