Search code examples
ccharmallocsizeofc99

Allocating char array using malloc


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?


Solution

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