2013-05-01 306 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