Allocating char array using malloc

随声附和 提交于 2019-12-18 12:23:47

问题


Hi recently I saw a lot of code on online(also on SO;) like:

   char *p = malloc( sizeof(char) * ( len + 1 ) );

Why sizeof(char) ? It's not necessary, isn't it? Or Is it just a matter of style? What advantages does it have?


回答1:


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.




回答2:


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.




回答3:


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



来源:https://stackoverflow.com/questions/3115564/allocating-char-array-using-malloc

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