【发布时间】:2017-06-30 12:29:34
【问题描述】:
当我想从字符串中复制 2 个字符时,我无法创建 strncpy,但是当我想复制 3 个字符时,相同的代码正在工作。
在本例中,我需要 strncpy() 将 12 存储在 'to' 变量中:
void main(){
const char* from = "12345678";
char *to = (char*) malloc(3);
strncpy(to, from, 2);
printf("%s", to);
free(to);
}
但是当我将strncpy(to, from, 3) 与malloc(4) 一起使用时,它可以正常工作。有什么解决方案可以完成这项工作吗?
【问题讨论】:
-
当问题陈述很简单时,很难提供解决方案,“它不起作用”。请edit您的问题更完整地描述您预期会发生什么以及这与实际结果有何不同。请参阅 How to Ask 以获取有关什么是好的解释的提示。
-
只需阅读文档:如果 source 长于 num,则不会在目标末尾隐式附加空字符。
-
对未来的提示:不要使用
strncpy,大多数时候它不会做你想做的事。 -
这个bug确实是由于使用了危险的
strncpy函数造成的。永远不要使用该功能,而是使用strcpy或memcpy(以及适当的缓冲区大小检查)。