在以下有关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/

10-17 00:20