main 함수를 통한 인자의 전달
우리가 지금까지 보아온 main 함수의 정의형태
int main(void){....}
main 함수는 다음과 같이 정의 가능
int main(int argc, char* argv[]){....}
프로그램 실행 시 main함수로 전달할 인저를 열거할 수 있으며(결정할 수 있으며), main 함수 역시 이러한 인자를 전달받을 수 있도록 제한된 형태의 매개변수 선언이 가능하다.
아래와 같이 코드를 작성
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("전달된 문자열의 수 : %d \n", argc);
for (int i = 0; i < argc; i++)
printf("%d번째 문자열: %s \n", i+1, argv[i]);
return 0;
}
- 솔루션 빌드 후 생긴 exe 파일을 c드라이브로 복사(사실 복사 안하고 exe 생성 디렉토리에서 바로 작업해도 된다)
- c드라이브 작업 공간을 옮긴 후 터미널을 열어 명령문 실행(c_study.exe Hello Bye)
- 아래와 같은 결과 확인 가능
프로그램 실행과정에서 입력한 내용이 프로그램 안으로 전달되어서 출력이 됨
char* argv[]
char* argv[]
이미 경험한바 있는 유형의 포인터 변수 선언.
앞서 매개변수 선언에서 다음 두 선언은 같은 선언임을 설명
void simplefunc(TYPE *arr) {....}
void simplefunc(TYPE arr[]) {....}
즉, TYPE형 1차원 배열의 이름(주소 값)을 인자로 전달받을 수 있는 매개변수의 선언이다.
그럼 이제 다음과 같이 TYPE을 char*로 바꿔보자.
그럼 char형 포인터 변수로 이뤄진 1차원 배열의 이름을 인자로 받을 수 있는 매개변수의 선언이 된다.
void simplefunc(TYPE **arr) {....}
void simplefunc(TYPE * arr[]) {....}
main 함수의 argv는 char형 더블 포인터 변수이고,
이는 char형 포인터 변수로 이뤄진 1차원 배열의 이름을 전달받을 수 있는 매개변수
아래를 참고하면 이전 내용이랑 크게 다르지 않다는 것을 알 수 있음
#include <stdio.h>
void showstring(int argc, char* argv[])
{
for (int i = 0; i < argc; i++)
printf("%s \n", argv[i]);
}
int main(int argc, char* argv[])
{
char* str[3] = {
"C programming",
"C++ programming",
"Python programming",
};
showstring(3, str);
return 0;
}
인자의 형성 과정
c_study가 실행되면서 이의 main 함수로 다음과 같이 총 3개의 문자열 정보가 전달된다.
문자열 1 c_study.exe
문자열 2 Hello
문자열 3 Bye
공백이 문자열을 나누는 기준이 된다.
이리하여 총 3개의 문자열이 다음과 같이 하나의 배열에 묶여서 ,ain 함수의 두 번째 인자로 전달이 되며,
첫 번째 인자로는 문자열의 수가 전달된다.
즉, 위와 같은 배열이 구성된 다음에 main 함수는 다음의 형태로 호출된다.
main(3, strArr);
위의 그림처럼 배열의 마지막에 NULL이 삽입되는지 확인하기 위해서 예제
NULL이 잘 삽입된다는 특징을 이용해서 모든 문자열 출력
#include <stdio.h>
int main(int argc, char* argv[])
{
int i = 0;
printf("전달된 문자열의 수 : %d \n", argc);
while (argv[i] != NULL)
{
printf("%d번째 문자열 : %s \n", i + 1, argv[i]);
i++;
}
return 0;
}
큰 따옴표를 묶으면 공백을 포함하는 문자열을 생성해서 main함수의 인자로 전달하는 것이 가능
참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C' 카테고리의 다른 글
문자와 문자열 관련 함수(21-2) 문자 단위 입출력 함수 (0) | 2020.12.10 |
---|---|
문자와 문자열 관련 함수(21-1) 스트림과 데이터의 이동 (0) | 2020.12.10 |
함수 포인터와 void 포인터(19-1) 함수 포인터와 void 포인터 (0) | 2020.12.10 |
다차원 배열과 포인터의 관계(18-2) 2차원 배열이름의 특성과 주의사항 (0) | 2020.12.10 |
다차원 배열과 포인터의 관계(18-1) 2차원 배열 이름의 포인터형 (0) | 2020.12.10 |