繁体   English   中英

为什么缓冲区溢出复制字符串?

[英]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);

它可能由于多种原因而失败,例如

  1. pathValue是一个指针,并不是所有的malloc()都能存储足够的内存。
  2. strlen()将不计终止空,所以你错过了同在pathValue2同时做strncpy()pathlength

完全不要使用这种方法。 这个malloc() + strncpy()是我所见过的最大陷阱之一。

相反,学习使用strdup() 最好不要错误地使用strncpy()惹麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM