【问题标题】:Null-terminated strings created with calloc?用 calloc 创建的以空字符结尾的字符串?
【发布时间】:2020-05-14 21:42:03
【问题描述】:

我想使用 calloc 为字符串分配内存,我知道 calloc 用 0 填充整个分配的内存,但我也发现它们在某些情况下与 \0 不同。 整个讨论对于新手(比如我自己)来说有点令人困惑,所以我想知道是否有人可以给我最终答案,如果我使用 alloc 来初始化字符串,我是否必须手动将最后一个字符设置为“\0”还是不行?

【问题讨论】:

  • calloc zero 初始化分配的内存。 '\0' 为零。:)
  • 文字字符 '\0' 实际上是 0 的八进制转义。所以空终止符'\0' 真的是零。
  • 为字符串分配内存时要记住的主要事情是实际包含终止符的空间。
  • 感谢大家的快速解答!
  • 这有几种方法会出错。 1)你用calloc分配5个字节,然后把一个5个字符的字符串放到那个内存中(例如“hello”)。那是行不通的,因为“hello”需要 6 个字节,其中 5 个用于字母,另外 1 个用于最后的 '\0'。 2) 你分配了 6 个或更多字节,将“hello”放入内存,然后尝试将字符串更改为“hi”。除非在i 之后有'\0',否则这将不起作用。没有'\0',你会得到“hillo”。

标签: c string pointers calloc nul


【解决方案1】:

整数值0calloc 填满分配的内存)与文字字符'\0'(与整数值0 相同)之间没有区别。

因此,如果您将最多n-1 个字符写入分配给callocn 个字符的内存块,您将始终拥有一个有效的以0 结尾的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2010-12-23
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多