我非常担心C中的字符串。我是否需要设置最后一个字符\0还是由它自己完成?如果我不手动执行操作,则当我尝试调试代码并访问string1 [257]时,它不为null。我在释放分配的字符串数组内存时遇到问题,所以我认为这是一个原因。

char string1[257], string2[257];
scanf("%s", &string2);
string1[257] = '\0';
strncpy(string1, string2, 257);
string1[257] = '\0'; /* do I need to do that? */

最佳答案

绝对必要吗? ,因为当您调用scanfstrcpy(除了strncpy时,如果超过该大小,则需要手动将其设置为零),它将为您复制空终止符。反正这样做好吗? 并不是,它并不能真正解决缓冲区溢出的问题,因为这些函数无论如何都会超出缓冲区的大小。那最好的方法是什么?将C++与std::string一起使用。

顺便说一下,如果您访问/写入string1[257],那将是无界的,因为您正在访问/写入大小为257的数组中的第258个元素。(它是从0开始的索引)

关于c - C中以Null结尾的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8202897/

10-13 07:10