strncpy引入了有趣的角色

Dun*_*unc 2 c strncpy

当我在我的机器上运行一些代码时,它的行为就像我期望的那样.

当我在同事身上跑它时,它行为不端.这就是发生的事情.

我有一个值为的字符串:

croc_data_0001.idx

当我strncpy在字符串上提供18作为长度时,我复制的字符串的值为:

croc_data_0001.idx♂

如果我做以下事情

myCopiedString[18]='\0';
puts (myCopiedString);
Run Code Online (Sandbox Code Playgroud)

然后复制的字符串的值是:

croc_data_0001.idx

什么可能导致这个问题,为什么通过设置最后一个字符来解决\0

Ale*_*lov 5

根据http://www.cplusplus.com/reference/clibrary/cstring/strncpy/

char * strncpy ( char * destination, const char * source, size_t num );
Copy characters from string
Run Code Online (Sandbox Code Playgroud)

将源的前num个字符复制到目标.如果在复制num个字符之前找到源C字符串的结尾(由空字符表示),则使用零填充目标,直到已向其写入总共num个字符.没有空字符隐式附加到目标的末尾,因此如果源中的C字符串的长度小于num,则目标将仅以空值终止.

因此,您需要使用'\ 0'手动终止目标.