![](/img/trans.png)
[英]Why copying data into buffer using memcpy cause buffer to overflow?
[英]Why buffer overflow copying a string?
我正在学习C,但我不明白为什么复制字符串时缓冲区溢出。
pathValue = getenv("PATH");
pathlength = strlen(pathValue);
pathValue2 = malloc(sizeof(pathValue));
strncpy(pathValue2, pathValue, pathlength);
你能告诉我应该怎么做吗?
pathlength = strlen(pathValue);
pathValue2 = malloc(sizeof(pathValue));
strncpy(pathValue2, pathValue, pathlength);
首先,这是:
pathValue2 = malloc(sizeof(pathValue));
sizeof可能不是您想要的,我们需要查看pathValue以确保。 您可能的意思是:
pathValue2 = malloc(strlen(pathValue)+1);
另请注意+1,这会为NULL终止符增加空间。
最后:
strncpy(pathValue2, pathValue, pathlength);
只需使用此:
strcpy(pathValue2, pathValue);
您需要在pathlength
上加1,以解决C字符串末尾的以零结尾的字符的问题。
pathValue2 = malloc(pathlength + 1);
strncpy(pathValue2, pathValue, pathlength + 1);
它可能由于多种原因而失败,例如
pathValue
是一个指针,并不是所有的malloc()
都能存储足够的内存。 strlen()
将不计终止空,所以你错过了同在pathValue2
同时做strncpy()
与pathlength
。 完全不要使用这种方法。 这个malloc()
+ strncpy()
是我所见过的最大陷阱之一。
相反,学习使用strdup()
。 最好不要错误地使用strncpy()
惹麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.