C에서 지정된 크기의 정적으로 선언 된 문자 배열을 리터럴로 초기화해야합니까?
예를 들어,gcc는이 문제를 컴파일합니다 ...
char s[7] = "abc";
하지만 "할당 할 수없는 유형"이라는 오류가 있습니다 ...
char s[7];
s = "abc";
차이점은 무엇입니까?
C에서 지정된 크기의 정적으로 선언 된 문자 배열을 리터럴로 초기화해야합니까?
예를 들어,gcc는이 문제를 컴파일합니다 ...
char s[7] = "abc";
하지만 "할당 할 수없는 유형"이라는 오류가 있습니다 ...
char s[7];
s = "abc";
차이점은 무엇입니까?
첫 번째 것은 초기화입니다. 그것은 "스택에 7 char
의 배열을 선언하고 첫 번째 3 개의 요소를 'a'
, 'b'
, 'c'
및 나머지 요소를 '\0'
"으로 채우는 것을 의미합니다.
둘째로, 배열을 초기화하지 않을 것입니다. 그런 다음 배열에 할당하려고합니다. 이는 유효하지 않습니다. (s
이제 포인터 아닌 배열입니다)
const char *s;
s = "abc";
그러나 의미는 약간 다른 것 : 이런 식으로 뭔가는 "일"것입니다. 대부분의 경우 차이는 거의 없습니다. 그러나 중요한 몇 가지주의 사항이 있습니다. 예를 들어 내용을 수정할 수 없습니다. 또한 sizeof(s)
은 포인터의 크기를 주지만 원래 코드에서는 7 (배열의 크기)을 지정했을 것입니다.
권장되는 읽기 값은 http://c-faq.com/charstring/index.html입니다.
첫 번째 경우에도 나머지 세 항목은 '\ 0'으로 초기화됩니다. 이것은 매우 유용 할 수 있습니다. – Keith
@Keith : 예, 대답에 추가하겠습니다 ... –
"최소"차이를 지정하지 않겠습니다. 포인터와 배열의 차이를 과소 평가하는 것은 C 뉴비가 만드는 가장 일반적이며 위험한 실수 중 하나입니다. –