2013-05-01 313 views
1

我的软件是一个网络爬虫,当我从http响应中获取正文时,它就会崩溃。memcpy段错误,这段代码有什么问题?

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

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

+0

如何初始化'body_start'?显然这是最有可能的罪魁祸首。 – 2013-05-01 06:12:40

+0

body_start是http响应正文开始的指针。我检查了错误,所以当程序运行memcpy时,body_start被正确初始化了。 – YuYang 2013-05-01 06:24:44

+0

请原谅我,如果我不听你的话。 – 2013-05-01 07:21:45

回答

2

身体是ZIP编码,从ZIP wikipedia page;

幻数
没有,虽然PK \ 003 \ 004,PK \ 005 \ 006(空档案),或PK \ 007 \ 008(跨区卷归档)是常见的。

您需要检查标题并在读取之前解压缩主体。

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

+0

感谢您的答复。该链接似乎链接到一个zip文件。并且程序会下载它,但是当我发送一个http请求时,我在请求头中添加了“Accept:text/html”,服务器仍然给我一个zip文件。 – YuYang 2013-05-01 06:32:21

+1

@YuYang如果你要求一个zip文件,并且服务器没有别的编码方式,大多数web服务器都会发送这个文件。 – 2013-05-01 06:35:06

+0

是的,我得到的错误,过滤网址的功能不包含zip.thank你非常..... – YuYang 2013-05-01 06:40:32