왜 sizeof("Bill")
은 5
이지만 sizeof(char)
은 1
입니까?문자열의 바이트 크기가 길이보다 긴 이유는 무엇입니까?
문자열의 길이가 4 문자 (4 x 1
)이기 때문에 sizeof("Bill")
이 4
이 아니어야합니까?
나는 문자 배열 인 "Bill"
과 관련이있을 것이라고 생각하지만, 왜 이것이 바이트 크기를 늘립니까?
왜 sizeof("Bill")
은 5
이지만 sizeof(char)
은 1
입니까?문자열의 바이트 크기가 길이보다 긴 이유는 무엇입니까?
문자열의 길이가 4 문자 (4 x 1
)이기 때문에 sizeof("Bill")
이 4
이 아니어야합니까?
나는 문자 배열 인 "Bill"
과 관련이있을 것이라고 생각하지만, 왜 이것이 바이트 크기를 늘립니까?
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'
.
그것은 터미네이터 문자로 0, 그래서 그 B i l l 0
H2CO3 @
있다 - 나는 동의 -이 보통 C (또는 C에 대한 합리적인 프로그래밍 책의 챕터의 처음 몇 내에서 덮여 간단한 C 프로그래밍을하다 ++를) –
좋은 정식 답변을 작성하고 인터넷을 조금 개선 할 수있는 곳으로이 질문을 사용하지 않을 이유가 없습니다. –
@EdHeal 클로저 투표는 동의 할만한 좋은 징표가 될 수 있습니다;) 전적으로 동의합니다.이 질문은 FAQ에서 "연구 노력이 없다"라는 용어에 잘 들어 맞습니다. –