2012-12-07 69 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;的空字符串。