使用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
包括在内以保持一致性,但这并不重要