使用malloc分配时是否包含空字符

我已经使用C很长一段时间了,我有这个小问题,我想查询。

假设我想创建一个存储多达1000个字符的字符数组。 现在,当我使用malloc时,我将数组的大小指定为1001个字符[1000个字符+空]或仅1000个?

另外,说我遇到了这个问题,那么我怎么能自己找到这个解决方案的答案,也许是通过使用一些测试程序。 我理解字符串的大小是在没有空字符的情况下计算的,但是当我为它分配内存时,我是否也考虑了空字符?

如果你需要那个块来存储以null结尾的字符串,那么你需要明确要求malloc()为存储空终止符分配一个额外的字节,否则malloc()不会为你做。 如果您打算将字符串长度存储在其他位置,因此您不需要空终止符,您可以在不分配额外字节的情况下离开。 当然,您是否需要对字符串进行空终止,并且不要忘记C库字符串处理函数仅适用于以空字符结尾的字符串。

malloc和family以字节块的forms分配内存。 所以,如果你做malloc(1000)你会得到1000个字节。 malloc不关心你是否分配了这1000个字节来保存字符串或任何其他数据类型。

由于C中的字符串由每个字符一个字节组成,理想情况下必须为空终止,因此您需要确保有足够的内存来容纳它。 所以答案是:是的,如果你想保持一个1000个字符的字符串加上空终止符,你需要分配1001个字节。

高级提示:还要记住,根据您的使用方式,您可能需要也可能不需要null终止字符串。

例如,如果您知道字符串的确切长度,则可以在将其与printf使用时指定

 printf("%*s", length, string); 

将从指向string的缓冲区中精确打印length字符。

确实需要为null终止符分配内存。

从概念上讲,null终止符只是标记字符串结尾的便捷方式。 C标准库在建模字符串时利用此约定。 例如,strlen通过检查输入位置(可能是char *)的内存来计算字符串的长度,直到它到达null终止符; 但是null终止符本身不包含在长度中。 但它仍然是字符串消耗的内存的一部分。

由你来提供空终止字符。

malloc为您分配内存,但它没有将其设置为任何内容。

如果你strcpy到分配的内存,那么你将为你提供一个null终止符。

或者,使用calloc因为它将所有元素设置为0,这实际上是null终止符。 然后,如果你这样做,比如memcpy ,你就不必担心正确终止字符串了。