问题
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