使用malloc分配char数组

时间:2010-06-25 04:35:14

标签: c char malloc sizeof c99

您好我最近在网上看到了很多代码(也在SO上),例如:

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

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

3 个答案:

答案 0 :(得分:18)

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

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

也许更适合维护。如果您从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 ) );

用于普通缓冲区。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

规范规定字符为1字节,因此它是严格可选的。我个人总是包含sizeof以保持一致性,但无关紧要