使用calloc创建的以Null结尾的字符串?

使用calloc创建的以Null结尾的字符串?,c,string,pointers,calloc,nul,C,String,Pointers,Calloc,Nul,我想使用calloc为字符串分配内存,我知道calloc用0填充整个分配的内存,但我也发现它们在某些上下文中与\0不同。 整个讨论对我这样的新手来说有点困惑,所以我想知道是否有人能给我最后的答案,如果我使用alloc初始化字符串,我是否必须手动将最后一个字符设置为\0?整数值0之间没有区别,calloc用它填充分配的内存,以及与整数值0相同的文字字符“\0” 因此,如果您向使用calloc分配的n个字符组成的内存块中写入多达n-1个字符,则始终会有一个以0结尾的有效字符串。calloc zero

我想使用calloc为字符串分配内存,我知道calloc用0填充整个分配的内存,但我也发现它们在某些上下文中与\0不同。
整个讨论对我这样的新手来说有点困惑,所以我想知道是否有人能给我最后的答案,如果我使用alloc初始化字符串,我是否必须手动将最后一个字符设置为\0?

整数值0之间没有区别,calloc用它填充分配的内存,以及与整数值0相同的文字字符“\0”


因此,如果您向使用calloc分配的n个字符组成的内存块中写入多达n-1个字符,则始终会有一个以0结尾的有效字符串。

calloc zero初始化分配的内存。“\0”为零。文字字符“\0”实际上是0的八进制转义。所以空终止符“\0”实际上是零。在为字符串分配内存时,要记住的主要事情是实际包含终止符的空间。谢谢大家的快速回答!有两种方法可能会出错。1您使用calloc分配5个字节,然后将一个5个字符的字符串放入该内存中,例如hello。这行不通,因为hello需要6个字节,5个字节用于字母,另一个字节用于结尾的“\0”。2分配6个或更多字节,将hello放入内存,然后尝试将字符串更改为hi。除非在i后面有一个“\0”,否则这将不起作用。如果没有“\0”,您将得到hillo。