본문 바로가기

프로그래밍./C언어.

[C언어] main에서 입력받기. argc / argv / 간단예제

빼먹었던 소스 사진 첨부;; 모르고 있다가 이제야 발견;

[C언어] main에서 입력받기. argc / argv / 간단예제

main에서 인자를 전달 받을 수 있다. (argc, argv)

보기만 해도 아는 사람이 있겠지만.. 간단하게 설명을 하자면
argc 는 int 로, 입력 받는 인자(문자열)의 개수 이다. 여기서 잠깐 착각 할 수 있는데.

실질적으로 내가 입력한 인자보다 1개가 더 나온다. 이유는 내가 실행시킨 파일명도 인자로써 전달되기 때문.
argv는 문자열배열로 여러개의 문자들(문자열)을 배열로 저장한다. 문자열의 기준은 "공백" 또는 "엔터" 이다.

argv에 0번째는 위에서 설명했듯이 파일명.
argv에 1번째는 첫 번째 인자.
argv에 2번째는 두 번째 인자. 이런식으로 입력된다.

argv에 크기를 지정한 것이 아니기 때문에 인자의 개수는 사용자 입력한 만큼 생성된다.
마음껏 입력하고, 필요한 인자를 argv[순서]를 이용해서 사용하자. '순서'는 몇번째 인자인지를 말한다.



일단 main에 인자를 입력하는 경우에는 방법이 조금 다르므로 처음부터 만들기로 하겠다.

우선 New로 새로운 프로젝트를 생성한다.
 연히 win32 Console Application 선택.
원하는 프로젝트 명 입력하고 OK.


Finish 선택.

그리고 다시 New 를 해서 이번엔 File를 선택하고 C++ Source File 선택.
원하는 파일명 입력한 후 OK 선택.
단, 가끔 파일명만 적는 사람들이 있는데, 꼭 .c 를 붙여주자. 그렇지 않으면 cpp 로. 즉 C++ 파일이 되어 버린다.
간단한 경우 이상없이 동작하는 경우도 있지만. 절대로 빼먹지 말자.


예제에 소스이다. 컴파일 하고 아래 내용대로 따라하면 된다.
*argv[] 라고 대부분 쓰지만, **argv도 상관없다. 동일한 의미이다.
나중에 배열과 포인터의 관계에 대해서 배운다면 이해하게 될 것이다.
(여태 소스 사진이 빠진걸 몰랐었다가 이제야 발개했다 - 0-;; )


자신이 지정해 놓은 프로젝트를 저장하는 경로에서 지정한 프로젝트 명 폴더가 있다.
만약 저장한 경로를 모른다면 아래 링크를 통해서 확인하자.

[C언어] C언어 파일 경로 / 저장한 프로젝트 경로 / C언어 저장.


그 안에 Debug 폴더에 들어가면 위와 같이 '프로젝트명.exe' 응용프로그램 파일이 생성된다.
요놈을 테스트하기 편하게 복사해서 C 드라이브 바로 밑에 복사하자. 
폴더 없이 바로 C 드라이브 들어가자 마자 붙여넣기.

다음은 윈도우키 + R 또는, 시작 -> 실행.
cmd 라고 입력하고 확인을 누르자.

아래와 같이 창이 나오는데.
cd c:/ 라고 입력해 주자. 이는 현재 Dong gyu 라는 폴더에서 C 드라이브로 이동하겠다는 의미이다.

C:\> C 드라이브로 이동된 것이 보일것이다.

여기서 우리의 파일명을 입력하고 공백을 주고 원하는 인자값을 넣어주자.
test 0525    오늘 날짜를 입력했다.

위에서 설명한 것 처럼 문자열의 수. 즉 argc의 값은 3으로
arg_test
test
0525   를 의미한다.

코드에서 보면 알겠지만 실제로는 argv[0] 번째에 arg_test 가 있지만
화면에서 보기 편하게 +1 을 해준 것이다. 배열은 항상 0번부터 시작임을 잊지 말자.



여기서 중요한 포인트가 하나 있다. 우리는가 입력받는 단위를 "공백"을 기준으로 한다.

scanf 에서도 써봐서 알겠지만, '공백' 또는 '엔터'키를 이용해서 구분을 한다.

따라서 인자값에 공백이 들어가면 공백을 기준으로 각각 다른 인자로 인식해 버린다 - -;

만약 홍 길 동 이라고 입력을 한다면, 한글자씩 따로 인자가 넘어가는 셈이다 - 0-;

때문에 인자값에 공백이 들어가는 경우에는 " 를 이용해서 묶어주어야 한다.

arg_test "홍 길 동" 0525 이런식으로 사용해야 한다. 절대로 잊지말자. 

지금은 간단해서 별거 아닌듯 보이지만, 나중에 입력받는 인자의 개수를 제안하고 조절하다 보면

분명 문제가 발생하기 마련인다. 공백이 포함된 인자값을 전달할 땐 반드시 " 큰 따음표로 묶어 주어야 한다.



유용한 정보가 되셨다면 아래 손가락 버튼 한번 눌러주세요 ^-^