Considering the following line:
char *p = malloc( sizeof(char) * ( len + 1 ) );
Why is sizeof(char) used? It's not necessary, is it? Or Is it just a matt开发者_运维技巧er of style?
What advantages does it have?
Yes, it's a matter of style, because you'd expect sizeof(char)
to always be one.
On the other hand, it's very much an idiom to use sizeof(foo)
when doing a malloc
, and most importantly it makes the code self documenting.
Also better for maintenance, perhaps. If you were switching from char
to wchar
, you'd switch to
wchar *p = malloc( sizeof(wchar) * ( len + 1 ) );
without much thought. Whereas converting the statement char *p = malloc( len + 1 );
would require more thought. It's all about reducing mental overhead.
And as @Nyan suggests in a comment, you could also do
type *p = malloc( sizeof(*p) * ( len + 1 ) );
for zero-terminated strings and
type *p = malloc( sizeof(*p) * len ) );
for ordinary buffers.
It serves to self-document the operation. The language defines a char to be exactly one byte. It doesn't specify how many bits are in that byte as some machines have 8, 12, 16, 19, or 30 bit minimum addressable units (or more). But a char is always one byte.
The specification dictates that chars are 1-byte, so it is strictly optional. I personally always include the sizeof
for consistency purposes, but it doesn't matter
精彩评论