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 matter 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.