memcpy段错误,这段代码有什么问题?

时间:2013-05-01 06:10:21

标签: c segmentation-fault memcpy

我的软件是一个Web爬虫,当我从http响应中获取正文时,它就会崩溃。

resp->body = Malloc(content_len);
memcpy(resp->body, body_start, content_len); //THIS IS THE FAULTY LINE

malloc是malloc的包装函数,所以resp-> body不是NULL,而content_len是以body_start开头的内存区域的长度,但其内容是“PK \ 003 \ 004 \ 024”,“\ 003 “是ETX(文本结束),”\ 004“是EOT(传输结束),”\ 024“是设备控制4,我真的不知道这些奇怪的字符是什么意思,为什么它会破解?

1 个答案:

答案 0 :(得分:2)

正文是来自ZIP wikipedia page;

的邮政编码
  

魔术数字
    没有,但 PK \ 003 \ 004 ,PK \ 005 \ 006(空存档)或PK \ 007 \ 008(跨区存档)很常见。

在阅读之前,您需要检查标题并解压缩身体。

至于分段错误,memcpy的3个参数中的任何一个都可能是罪魁祸首,显示其初始化的代码需要发现确切的问题。如果您在代码的未显示部分中使用正文中的任何字符串函数(strlen / strcpy),则它们可能会破坏二进制输入。