2013-06-03 2 views
11

sizeof("Bill")5이지만 sizeof(char)1입니까?문자열의 바이트 크기가 길이보다 긴 이유는 무엇입니까?

문자열의 길이가 4 문자 (4 x 1)이기 때문에 sizeof("Bill")4이 아니어야합니까?

나는 문자 배열 인 "Bill"과 관련이있을 것이라고 생각하지만, 왜 이것이 바이트 크기를 늘립니까?

+4

있다 - 나는 동의 -이 보통 C (또는 C에 대한 합리적인 프로그래밍 책의 챕터의 처음 몇 내에서 덮여 간단한 C 프로그래밍을하다 ++를) –

+7

좋은 정식 답변을 작성하고 인터넷을 조금 개선 할 수있는 곳으로이 질문을 사용하지 않을 이유가 없습니다. –

+2

@EdHeal 클로저 투표는 동의 할만한 좋은 징표가 될 수 있습니다;) 전적으로 동의합니다.이 질문은 FAQ에서 "연구 노력이 없다"라는 용어에 잘 들어 맞습니다. –

답변

22

C 문자열은 null로 끝납니다. 해당 문자열 끝에 0 바이트가 있습니다. C 표준에서

'B' 'i' 'l' 'l' '\0' 
0x42 0x69 0x6c 0x6c 0x00 

, 제 6.4.5 문자열 리터럴, 제 7 항 :

번역 상 7 바이트 또는 코드에서 ASCII를 가정하면, "Bill" 메모리에 다음과 같습니다 값 0은 문자열 리터럴 또는 리터럴의 결과 인 각 멀티 바이트 문자 시퀀스에 추가됩니다. 당신이 길이 4의 답을 얻고 싶다면

, 당신은 오히려 sizeof보다 strlen("Bill")를 사용해야합니다.

null-terminator를 정말로 원하지 않는다면, 가능하다. 이 정의 :

char bill[4] = "Bill"; 

단지 캐릭터 포함하는 4 바이트의 배열을 산출한다 bill'B' 아니 널 터미네이터 'i', 'l''l'.

3

그것은 터미네이터 문자로 0, 그래서 그 B i l l 0 H2CO3 @