main 함수로의 인자 전달

NOAH·2021년 3월 3일
0

char * argv[] 의 타입

먼저, 다음과 같은 사실을 인식할 수 있어야 한다.

  1. char ** arr과 같은 char arr[] 은 char 형 더블 포인터이다.

void SimpleFunc(char **arr) { ... } 
void SimpleFunc(char * arr[]) { . . . }
  1. 인자로써 1차원배열의 이름이 전달되고, 그 인자는 캐릭터터형 포인터 변수로 이루어진 배열이다.

매개변수 선언에서는 int *arr 은 inr arr[] 이렇게 표현될 수 있었다는 것을 기억하자. 그 이유는 배열의 이름이 인자로 전달 된다는 것을 강하게 어필하기 위해서 이다.

#include <stdio.h>
#include <ctype.h>
#include <string.h>



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


int main()
{
    // 포인터형 char**  + 인자는 1차원 배열의 이름
    char * str[3] = {
        "C programming",
        // 실제 전달되는 주소값은 0번 인덱스('C')의 주소값
        "C++ programming",
        "Java programming"
    };
    
    ShowAllString(3, str);
    // (문자열의 수, 문자열을 담고 있는 배열의 주소값)

    
    return 0;
}

인자의 형성과정

c:\> ArgcArgv I like you

문자열 1 "ArgcArgv"
문자열 2 "I"
문자열 3 "like"
문자열 4 "you"

strArr[0] = ArgcArgv\0
strArr[1] = I\0
strArr[2] = like\0
strArr[3] = you\0
strArr[4] = NULL

널문자(\0) 는 문자열의 끝을 의미한다.

그리고 맨 마지막 배열은 NULL 문자를 저장해준다.

프로그램은 NULL문자의 위치에 따라서 문자열이 끝난다는 것은 인식한다.

main(4, strArr[5]);

매개변수 int argc 를 참조해서 문자열의 길이를,
char * argv[]를 통해서 문자열 배열에 접근을 할 수 있다.

다음 소스를 이해하며 읽어보자.


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 ; 
    

}


C : \> ArgvEndNULL "I love you"

전달된 문자열의 수: 2
1번째 문자열: ArgvEndNULL
2번째 문자열: I love you

//"" 사이의 문자열만을 문자열로 취급한다. 

0개의 댓글