본문 바로가기

BackEnd/C

main 함수로의 문자열 전달

반응형

1.  main 함수의 새로운 유형


지금까지는 main 함수의 매개변수 형을 void로 선언하였다. 그러나 프로그램 실행 시 인자를 


달받을 수 있는 형태로 main 함수를 선언할 수 있으며, 실제로 인자를 전달하는 것도 가능하다.


main함수의 매개변수에 char * argv[ ]가 선언되었는데 먼저 이를 알아보자


1
2
3
4
5
6
int main(int argc, char * argv[])
{
....
return 0;
}

cs


2. char * argv[ ] 선언에 대한 복습


위와 같은 main 함수의 유형을 이해하기 위해서는


char * argv[ ] 선언이 의미하는 바를 이해해야한다. 


char * argv[ ] 대해서는 이미 살펴보았다. 아래 링크를 참고하자.


https://cg-developer.tistory.com/207?category=765535


그리고 예제를 추가적으로 더 봐보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
void ShowString(char * argv[], int strNum);
 
int main(void)
{
    char* strPtrAry[3]={
        "AAA",
        "BBB",
        "CCC"
    };
 
    char** strPtr=strPtrAry;
    ShowString(strPtr, 3);
 
    return 0;
}

void ShowString(char * argv[], int strNum)
{
    int i;
    for(i=0; i<strNum; i++)
        printf("%s \n", argv[i]);
}

cs


1
2
3
AAA
BBB
CCC
cs


- 18행 : 1차원 char형 포인터 배열의 주소 값이 첫 번째 인자로 전달됨을 매개변수의 선언을 통해 알 수 있다.


- 13행 : strPtr이 char형 이중 포인터로 선언되었다. 그렇다면 7행에 선언된 배열의 이름 

     

     strPtrAry는 char형 포인터의 주소 값을 담고 있다는 뜻이 된다.


- 7행과, 13행의 메모리 구조는 다음과 같다



배열 이름 strPtrAry에는 배열의 첫 번째 요소의 주소 값이 담겨 있으므로, 결국은 char형 포인터를 


가리키고 있는 셈이다. 따라서 위 예제 13행에서 보여주듯이, strPtrAry에 담겨 있는 값의 저장을 위


해서는 char형 이중 포인터를 선언해야 한다. 


3.  main 함수로의 문자열 전달


main 함수가 다음과 같은 형태로 선언되면, main 함수로 문자열을 전달할 수 있다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(int argc, char * argv[])
{
    int idx=0;
 
    /* argc에 저장된 값 조회 */
    printf("argc: %d \n", argc);
 
    /* argv가 참조하는 문자열들 출력 */
    while(argv[idx] != NULL)
    {
        printf("argv[%d]: %s \n", idx, argv[idx]);
        idx++;
    }
 
    return 0;
}

cs


main 함수의 첫 번째 전달인자로는 입력된 문자열의 개수 정보가(문자열은 공백을 기준으로 구분


이 된다), 두 번째 전달인자로는 문자열의 주소 정보를 담고 있는 char형 포인터 배열의 주소 값이 


전달된다. 나는 Dev C++ 상에서 main 함수에 전달할 문자열을 구성하였는데,


메뉴에서 “실행一매개변수들”을 선택하면 문자열을 입력할 수 있는 창이 뜬다. 


실행파일의 이름은 첫 번째 문자열로 자동 입력이 되고, 나머지 문자열은 공백을 기준으로 구분해


서 입력하면 된다.


다음과 같이 입력하였다. 



아래는 출력.


1
2
3
4
5
argc: 4
argv[0]: 26-7.exe
argv[1]: AAA
argv[2]: BBB
argv[3]: CCC
cs


아래는 전달된 문자열 배열의 구성과 인자의 전달 과정을 보여준다.





반응형