使用malloc分配char数组

嗨,最近我在网上看到了很多代码(也是关于SO;),如:

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

为什么sizeof(char)? 这不是必要的,不是吗? 或者只是风格问题? 它有什么优势?

是的,这是一个风格问题,因为你希望sizeof(char)永远是一个。

另一方面,在执行malloc时使用sizeof(foo)非常习惯,最重要的是它使代码自我记录。

也许更适合维护。 如果您从char切换到wchar ,则切换到

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

没有多想。 转换语句char *p = malloc( len + 1 ); 需要更多的思考。 这都是为了减少心理开销。

正如@Nyan在评论中建议的那样,你也可以做到

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

对于零终止字符串和

 type *p = malloc( sizeof(*p) * len ) ); 

对于普通缓冲区。

它用于自我记录操作。 该语言将char定义为一个字节。 它没有指定该字节中有多少 ,因为某些机器具有8,12,16,19或30位最小可寻址单元(或更多)。 但是char总是一个字节。

规范规定字符为1字节,因此它是严格可选的。 我个人总是将sizeof包括在内以保持一致性,但这并不重要