2010-05-01 4 views

답변

8

구문 상 올바로 사용되며 NULL로 끝나는 문자열 배열을 만듭니다.

ARGV는 char*[]main (또는 동등 char**)에 전달하지만, 그것은 const char*보다는 char*로 문자열 리터럴을 치료하기 위해 "보다 정확한"입니다됩니다. 따라서이 특별한 예제를 원할 때 const char *argv[] = {"foo", "bar", NULL };

아마도 "foo"로 초기화 할 필요는 없지만 실제로는 argv를 통해 수정하고자하는 수정 가능한 문자열을 사용하게 될 것입니다. 이 경우 char*[]이 옳습니다. 이것은 코드가 "올바른지"여부에 따라 Charles가 의미하는 바를 말합니다.

+0

예,'const char * []'와 같이 취급되는'char * []'는 인터페이스상의 이유로 필요할 수 있지만, 그렇게 어려운 질문은 알고있을 수 없습니다. –

+0

감사합니다,이 내 질문을 해결합니다. 코드에 경고가 표시되었습니다. 경고 : 초기화가 포인터 대상 유형의 한정자를 무시합니다. 지금 사라졌습니다. – jjardon

5

코드의 나머지 부분이 실제로 argv와 함께 무엇에 따라 달라집니다.

0

예, 코드가 정식으로 정확합니다 (스티브의 발언은 const을 참조하십시오). char * 유형의 널 포인터로 종료되는 배열을 생성합니다. 어떤 이유로 당신의 배열이 특정 크기를 가지고있는 경우

또한

char *argv[4] = { "foo", "bar" }; 

또는

char *argv[10] = { "foo", "bar" }; 

을 할 수 있습니다. 이 경우 추가 요소는 명시 적으로 초기화하지 않더라도 null 포인터로 설정됩니다. 하지만이 경우에도 그 배열이 참으로 오랫동안 널 종료 (얻을 수 있는지 확인하기 때문에

char *argv[4] = { "foo", "bar", NULL }; 

을 사용하는 것이 낫다는 것을 말하고 싶지만 배열이 너무 짧게 발생하는 경우 컴파일러는 진단 메시지를 생성합니다).

관련 문제