当我在我的机器上运行一些代码时,它的行为就像我期望的那样.
当我在同事身上跑它时,它行为不端.这就是发生的事情.
我有一个值为的字符串:
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?
根据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'手动终止目标.