char *c[] = { "str1", "str2", "str3", "str4" };
char **c = { "str1", "str2", "str3", "str4" };
첫 번째 줄이 유효합니다. 두 번째는 그렇지 않습니다. 왜?char **를 사용하여 C에서 문자열 배열로 char **를 초기화
char *c[] = { "str1", "str2", "str3", "str4" };
char **c = { "str1", "str2", "str3", "str4" };
첫 번째 줄이 유효합니다. 두 번째는 그렇지 않습니다. 왜?char **를 사용하여 C에서 문자열 배열로 char **를 초기화
첫 줄 char*
의 어레이를 초기화하는 기본 구문을 사용할 수 있도록 배열이 아니다.
두 번째 줄은 단순히 형식 오류입니다. http://coliru.stacked-crooked.com/a/53464db7e2f31cfa이
당신은 화합물 문자하지만 (C99)로 저장할 수 있습니다 :
는 coliru에 살고 참조char **c = (char*[]){ "str1", "str2", "str3", "str4" };
이 일정하지 않은 화합물 문자 자동 저장에 있음을주의 함수에 정의 된 경우. 당신이 이렇게 할, 그것은 (혼동 유형 char[]
이있는) 문자열과 같은 상수 리터럴 (따라서 정적 스토리지)하고 싶다면
:
char **c = (char**)&*(const char* const []){ "str1", "str2", "str3", "str4" };
이것은 올바르지 않습니다. 질문에 태그가 붙어 있습니다. C – 4pie0
@ 0d0a : 올바르지 않은 것은 무엇입니까? – Deduplicator
"구문 오류", http://ideone.com/0DNMqm – 4pie0
그들이 다른 두 가지가 있으며, 배열 char * pointer와 char * pointer에 대한 char * pointer - 같은 것이 아님 –
문자열 리터럴을'char *'에 할당 할 때 자신에게 유리한 점을 주며 저장 클래스'const char *'를 지정하십시오. . 여기에있는 'const' 비트 –
문자열 리터럴에 대한 일반 비 const 포인터를 갖는 것은 결코 의미가 없습니다. const에 대한 포인터 여야합니다. – Lundin