이번 시간에는 명령행 인자인, argc와 argv를 해 보도록 하겠습니다. 사실, 이것이 무엇인지 생소할 수도 있습니다. 아래 ls 명령어를 봅시다. Linux에서 ls는 디렉토리에 있는 파일들에 대한 정보를 출력해 주는 명령어인데요.

 

  ls 명령어를 썼는데, 여기서 -a라는 옵션을 추가로 주었어요. 즉, 실행 파일을 실행할 때 옵션을 추가로 받을 수 있다는 의미입니다. 오늘은 이것들을 가지고 간단하게 놀아보도록 하겠습니다.

 

 


 먼저, 다음과 같이 실행을 했다고 생각해 봅시다.

 

 

 초록색으로 칠한 것은 실행 파일 명입니다. work를 실행을 한 것입니다. 그리고 보라색으로 칠한 것은 옵션을 의미하는데요. 보라색의 갯수는 5개임을 알 수 있습니다. argc는, 이 보라색의 갯수 + 1과 같습니다. 실행 파일명, 명령행 등은 space로 구분이 됩니다. 그러면, 아래 명령어로 work를 수행했을 때, argc의 값은 어떻게 될까요?

 

 

 ./work는 실행파일 명이고, -ail과 1234가 space를 기준으로 분리되어 있어요. 따라서, argc의 값은 2입니다. 그러면, argv는 무엇일까요? 잘 생각을 해 보면, 우리는 "./work"랑 "-ail"과 "1234"를 저장할 뭔가가 있어야 할 겁니다.

 

 


 이것을 그림으로 그려 봅시다.

 

 문자열들이 여러개 있습니다. 이것들을 어떻게 관리하면 좋을까요? 배열로 만들면 좋지 않을까요? 그러면, 문자열들을 모아놓은 배열이 무엇인가요? string array라고 하면 될 겁니다.

 

 

 그런데 char형 포인터로도 문자열을 가리킬 수 있어요. 이것들을 배열에 넣어놓아도 되겠네요. 그러면 각각의 요소는 어떤 값을 가지고 있을까요? 문자열의 시작 주소만 들고 있으면 될 겁니다.

 

 

 그러면 그것들을 모아놓은 배열을 뭐라고 할까요? char를 가리키는 포인터 배열이라고 보면 됩니다. 아니면, char *형을 가리키는 포인터로도, char *를 모아놓은 array를 가리킬 수 있어요.

 

 

 

 그러면, argv[0]과 argv[1], argv[2]는 무엇을 가리킬까요? 각각 "work", "-ail", "1234"를 가리킵니다. argv[x]는 x번째 옵션 문자열을 가리키게 됩니다.

 

 


 실행 파일의 이름을 work라고 해 봅시다. 그리고 추가 인자로 3 4 73이 들어왔다고 해 봅시다.

 

 

 그러면 argc는 4입니다. 옵션 갯수는 3이고 여기에 1을 더한 값이 4이기 때문입니다. argv[0]은 "work"를, argv[1]은 "3", argv[2]는 "4", argv[3]은 "73"을 가리킬 겁니다.

 

 이 프로그램은 무엇을 할까요? 일단 argc의 값은 4이니까, argv[1]부터 argv[3]까지 돌면서 뭔가를 할 겁니다. atoi(str)는, 문자열 str을 int형 수로 변환시켜주는 프로그램입니다. atoi("4")는 4, atoi("73")은 73이 될 겁니다. 즉 옵션을 "7", "3"을 줬다면 10을 출력하고 끝날 겁니다. 당연하게도 아무 옵션이 없으면 argc가 0이니까 0을 출력할 겁니다. test를 실행해 봅시다.

 

 

 옵션에 3, 4, 73을 주었습니다. 이 셋을 더하면 80이기 때문에, 80이 출력됩니다.