【发布时间】: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