2012-12-07 111 views
0

我想在C中實現一個非常基本的服務器,其中一部分構建HTTP頭。爲此,我編寫了一個名爲header_builder的類,它基本上爲我構建了標題。一個此類的最基本的方法是append_header_line,如下圖所示:strcat()不會退出

void append_header_line(const char *line, char *hdr) { 
    printf("Adding header line\n"); 
    strcat(hdr, line); 
    printf("Line added. Adding ending.\n"); 
    strcat(hdr, "\r\n"); 
    printf("Success\n"); 
} 

所有它的應該做的是粘性的「線」參數到「HDR」參數的終止,然後添加「\ r \ n「到最後。問題是第一個strcat調用從不退出。當我運行這段代碼,它是所有說:

添加標題行

這意味着下面的線永遠不會執行,我想不通爲什麼。有什麼想法嗎?

+2

你可以顯示調用它的代碼嗎?另外,你確定'strcat'永遠不會退出而不是崩潰嗎? – simonc

+0

您確定您的目標緩衝區中有附加字節的空間 – TJD

+0

*想到服務器依賴於'strcat'時發生Shudders *。 https://buildsecurityin.us-cert.gov/bsi-rules/home/g1/844-BSI.html –

回答

1

hdr和/或line未正確零終止,因此strcat一直運行,直到超出邊界。

0

我猜想其中一個字符串缺少它的空終止符。

1

當函數被調用時,hdrline中的一個(或兩者)可能不是以nul結尾的C字符串。特別是不要忘記,在添加第一個標頭之前,您需要將hdr初始化爲帶有hdr[0] = 0;的空字符串。