【问题标题】:Allocating char array using malloc使用 malloc 分配 char 数组
【发布时间】:2010-06-25 04:35:13
【问题描述】:

考虑以下行:

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

为什么要使用 sizeof(char)?这没有必要,不是吗?还是只是风格问题?

它有什么优势?

【问题讨论】:

标签: c char malloc sizeof c99


【解决方案1】:

是的,这是风格问题,因为您希望 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 ) );

对于普通缓冲区。

【讨论】:

  • 那为什么不使用 type *p = malloc( sizeof(*type) * (len+1) ); ;)
  • @Nyan:当然,这也有效。我以前从未见过这种情况,但如果我仍然是一名工作 C 程序员,我会考虑采纳你的建议作为一个习惯用法.. 虽然 len +1 部分仅适用于类似字符串的对象。
  • 您不仅会期望它是 1,而且它被定义为如此。为数不多的明确定义大小的项目之一。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    规范规定 chars 是 1 字节,因此它是严格可选的。出于一致性目的,我个人总是包含sizeof,但这并不重要

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多