我已经使用 C 语言很长一段时间了,现在我有个小问题需要查询。
比如说我想创建一个字符数组来存储最多 1000 个字符。那么,当我使用 malloc 来实现时,我应该将数组的大小设为 1001 个字符(1000 个字符 + 1 个 null),还是只设为 1000 个字符呢?
另外,如果我遇到这个问题,我该怎么自己找到答案呢?也许可以通过编写一些测试程序来解决。虽然我们知道,在计算字符串长度时不包括 null 字符,但是在为字符串分配内存时,是否应该考虑 null 字符呢?
我已经使用 C 语言很长一段时间了,现在我有个小问题需要查询。
比如说我想创建一个字符数组来存储最多 1000 个字符。那么,当我使用 malloc 来实现时,我应该将数组的大小设为 1001 个字符(1000 个字符 + 1 个 null),还是只设为 1000 个字符呢?
另外,如果我遇到这个问题,我该怎么自己找到答案呢?也许可以通过编写一些测试程序来解决。虽然我们知道,在计算字符串长度时不包括 null 字符,但是在为字符串分配内存时,是否应该考虑 null 字符呢?
malloc()
分配多一个字节来存储空字符,否则malloc()
不会为您分配。如果您打算在其他地方存储字符串长度,因此不需要空字符,则可以不分配额外的字节。当然,您是否需要对字符串进行空终止取决于您自己,只是不要忘记C库字符串处理函数仅适用于以空字符结尾的字符串。malloc
及其相关函数按字节分配内存。因此,如果您使用malloc(1000)
,则会获得1000个字节的内存。malloc
不会关心您是否将这1000个字节分配给字符串或其他任何数据类型。printf
时指定该长度。printf("%*s", length, string);
将会准确地从指向 string
的缓冲区中打印出 length
个字符。
由您提供空字符是必要的。
malloc
为您分配内存,但它不会将其设置为任何值。
如果您对分配的内存使用strcpy
,则会为您提供一个空终止符。
或者,使用calloc
,它会将所有元素设置为0,这实际上就是空终止符。然后如果您执行memcpy
等操作,就不必担心正确终止字符串。
calloc()
函数并不能改变您需要一千零一个字节来存储字符串的事实。 - This isn't my real name