C 프로그래밍 기초/사용자 입력 옵션 처리

argc와 argv의 데이터 구조 +/-

다음과 같이 프롬프트 상에서 프로그램이 실행되면 사용자가 입력한 추가 정보는 운영체제에 의해 처리되어 main 함수의 인수에 넘겨지게 된다.

$ aprogram param1 param2 param3

main 함수의 두 인수 중 argc에는 넘겨받은 인수의 수가 저장 되는데, 이 인수는 프로그램의 이름 자체도 포함 된다. 위의 예에서 사용자가 프로그램의 이름을 입력하고 세개의 인수를 추가로 입력 했기 때문에 argc의 값은 '프로그램의 이름 + 세개의 인수'가 되어 4가 된다. 다시 말해서 아무런 추가 정보를 입력하지 않았다고 해도 최소한 프로그램의 이름이 넘겨지기 때문에 argc의 값은 항상 0보다 큰 값이 된다.

두 번째 인수인 argv는 변수의 타입을 봐서 쉽게 알 수 있겠지만 '문자형 포인터 배열'이다. 배열의 각 위치에는 사용자가 입력한 문자열에 대한 포인터가 할당이 되며, 첫번째, 즉 인덱스 0에 해당되는 위치에는 항상 프로그램의 이름이 입력된다. 그렇기 때문에 인수는 항상 배열의 두 번째 위치에 채워 넣어지게 된다.