在以下有关strncpy
的地方:http://www.cplusplus.com/reference/clibrary/cstring/strncpy/,它提到了以下内容:
这句话是什么意思?
最佳答案
这意味着,例如,如果您的源字符串为20个字符加上一个空终止符,而strncpy
指定的字符数少于21个,则目标字符串将不会附加空值。
这是因为它的工作方式:strncpy
保证它将精确地写入N个字节,其中N是传入的长度值。
如果源字符串的长度(无null字节)小于该长度,则它将用null填充目标区域。如果等于或大于,则不会为目标添加空值。
这意味着从技术上讲它可能不是您得到的C字符串。可以使用以下代码解决:
char d[11]; // Have enough room for string and null.
strncpy (d, s, 10); // Copy up to 10 bytes of string, null the rest.
d[10] = '\0'; // Then append null manually in case s was too long.
您分配11个字节(数组索引0..10),最多复制10个(索引0..9),然后将第11个字节(索引10)设置为null。
下图显示了使用
strncpy (d, s, 10)
将各种大小的字符串写入10个字符的区域的三种可能性,其中.
表示一个空字节:s d
------------- ----------
Hello. Hello.....
Hello Fred. Hello Fred
Hello George. Hello Geor
请注意,在第二种和第三种情况下,不会写入任何空字节,因此,如果将
d
视为字符串,则结果可能会令人失望。关于c++ - strncpy文档问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4768271/