이 코드가 맞습니까? 이 분명히 아무 문제가 선언이나 초기화가 없다지만 "올바른"여부C에서 문자열의 NULL로 끝나는 배열을 초기화하는 올바른 방법
char *argv[] = { "foo", "bar", NULL };
이 코드가 맞습니까? 이 분명히 아무 문제가 선언이나 초기화가 없다지만 "올바른"여부C에서 문자열의 NULL로 끝나는 배열을 초기화하는 올바른 방법
char *argv[] = { "foo", "bar", NULL };
구문 상 올바로 사용되며 NULL로 끝나는 문자열 배열을 만듭니다.
ARGV는 char*[]
로 main
(또는 동등 char**
)에 전달하지만, 그것은 const char*
보다는 char*
로 문자열 리터럴을 치료하기 위해 "보다 정확한"입니다됩니다. 따라서이 특별한 예제를 원할 때 const char *argv[] = {"foo", "bar", NULL };
아마도 "foo"로 초기화 할 필요는 없지만 실제로는 argv를 통해 수정하고자하는 수정 가능한 문자열을 사용하게 될 것입니다. 이 경우 char*[]
이 옳습니다. 이것은 코드가 "올바른지"여부에 따라 Charles가 의미하는 바를 말합니다.
코드의 나머지 부분이 실제로 argv
와 함께 무엇에 따라 달라집니다.
예, 코드가 정식으로 정확합니다 (스티브의 발언은 const
을 참조하십시오). char *
유형의 널 포인터로 종료되는 배열을 생성합니다. 어떤 이유로 당신의 배열이 특정 크기를 가지고있는 경우
또한
char *argv[4] = { "foo", "bar" };
또는
char *argv[10] = { "foo", "bar" };
을 할 수 있습니다. 이 경우 추가 요소는 명시 적으로 초기화하지 않더라도 null 포인터로 설정됩니다. 하지만이 경우에도 그 배열이 참으로 오랫동안 널 종료 (얻을 수 있는지 확인하기 때문에
char *argv[4] = { "foo", "bar", NULL };
을 사용하는 것이 낫다는 것을 말하고 싶지만 배열이 너무 짧게 발생하는 경우 컴파일러는 진단 메시지를 생성합니다).
예,'const char * []'와 같이 취급되는'char * []'는 인터페이스상의 이유로 필요할 수 있지만, 그렇게 어려운 질문은 알고있을 수 없습니다. –
감사합니다,이 내 질문을 해결합니다. 코드에 경고가 표시되었습니다. 경고 : 초기화가 포인터 대상 유형의 한정자를 무시합니다. 지금 사라졌습니다. – jjardon