IT이야기

주 null에 있는 char * argv[] 인수가 종료되었는가?

cyworld 2022. 5. 4. 21:43
반응형

주 null에 있는 char * argv[] 인수가 종료되었는가?

그래서 명령행 매개변수가 항상 null로 종료되는지 궁금하다.구글은 그렇다고 답하는 것 같고 GCC에 편찬한 내용은 이런 경우를 나타내지만, 이것이 항상 사실이라고 보장할 수 있을까?

int main(int argc, char** argv)
{
    char *p;

    for(int cnt=1; cnt < argc; ++cnt)
    {
        p = argv[cnt];
        printf("%d = [%s]\n", cnt, p);
    }
    return 0;
}

$ MyProgram -arg1 -arg2 -arg3
1 = -arg1
2 = -arg2
3 = -arg3

네. Null이 아닌 포인터가.argv어레이 포인트가 C 문자열을 가리키며, 이는 정의상 null 종료된 것이다.

C 언어 표준은 배열 구성원이 "현줄에 대한 포인터를 포함해야 한다"고 간단히 명시한다(C99 §5.1.2.2.1/2).문자열은 "첫 번째 null 문자를 포함하여 종료된 문자의 연속적인 순서"이다(C99 §7.1.1/1). 즉, 문자열은 정의에 의해 null로 종료된다.

추가적으로, 배열 요소argv[argc]null 포인터이므로 배열 자체도 어떤 의미에서는 "종료됨"이다.

예, 인수가 null 종료된 문자열인 것은 항상 사실이다.

참조URL: https://stackoverflow.com/questions/11020172/are-char-argv-arguments-in-main-null-terminated

반응형