Why is a string's byte size longer than the length? [closed]

∥☆過路亽.° 提交于 2020-01-24 02:19:26

问题


Why is it that sizeof("Bill") is 5 but sizeof(char) is 1?

Shouldn't that make sizeof("Bill") be 4 since the length of the string is 4 chars (4 x 1)?

I believe it may have something to do with "Bill" being an array of characters, but why does that increase the byte size?


回答1:


C strings are null terminated. There is a zero byte at the end of that string. Assuming ASCII, "Bill" looks like this in memory:

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

From the C standard, Section 6.4.5 String literals, paragraph 7:

In translation phase 7, a byte or code of value zero is appended to each multibyte character sequence that results from a string literal or literals.

If you want to get an answer of 4 for the length, you should use strlen("Bill"), rather than sizeof.

If you really don't want the null-terminator, that's possible too, though probably ill-advised. This definition:

char bill[4] = "Bill";

will yield a 4-byte array bill containing just the characters 'B', 'i', 'l', and 'l', with no null-terminator.




回答2:


it has a 0 as a terminator character, so its B i l l 0



来源:https://stackoverflow.com/questions/16905877/why-is-a-strings-byte-size-longer-than-the-length

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!