2010-02-13 3 views
3

C 문자열은 문자 배열에서 문자 인덱스 strlen()의 문자가 0으로 설정된 모든 비트를 의미합니다. '\0' 대신 0 코드가 사용 된 코드를 보았습니다. 그러나 sizeof(int) > sizeof(char)부터 배열에 할당 된 공간을 넘어 실제로 쓸 수 있습니다. 제가 틀 렸습니다? 또는 컴파일러가 암시 적으로 intchar으로 캐스팅합니까?' 0'대신 0으로 C- 문자열을 종료하는 것이 잘못 되었습니까?

답변

10

예. 틀 ​​렸습니다. 0 값은 잘립니다. 결국, 당신이 쓸 경우 :

char c = 0; 

당신은 컴파일러가 변수 C의 범위를 넘어서 쓰는 것을 기대하지 않을 것입니다. 다음과 같이 쓰면 :

char c = 12345; 

다음 컴파일러에서 잘라내기를 경고해야합니다. GCC는 다음을 생성합니다.

c.c:2: warning: overflow in implicit constant conversion 

그러나 여전히 변수의 경계를 넘어 서면 아무것도 작성되지 않습니다.

13

0char의 배열에 저장하면 int가 암시 적으로 char로 변환됩니다.

사실, '\0'의 종류는 매우 somechararray[x]=0somechararray[x]='\0'는 의미 적으로 동일, int (하나는 예상 할 수 것과는 달리)입니다.

개인적으로 나는 '\0'으로 가서 더 명확하게하기 위해 문자열을 다루고 있습니다.

관련 문제