0

我正在尝试用 C 实现一个非常基本的服务器,其中一部分是构建 HTTP 标头。为此,我编写了一个名为 header_builder 的类,它基本上为我构建了标题。该类最基本的方法之一是append_header_line,如下所示:

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");
}   

它应该做的就是将“line”参数添加到“hdr”参数的末尾,然后将“\r\n”添加到所有参数的末尾。问题是第一个 strcat 调用永远不会退出。当我运行这段代码时,它所做的只是说:

添加标题行

这意味着以下几行永远不会执行,我不知道为什么。有什么想法吗?

4

4 回答 4

1

hdr和/或未line正确归零,因此strcat一直运行到超出范围。

于 2012-12-07T22:53:30.010 回答
1

hdr当函数被调用时,可能其中一个(或两个)line不是以 nul 结尾的 C 字符串。特别是不要忘记,在添加第一个标头之前,您需要hdr使用hdr[0] = 0;.

于 2012-12-07T22:54:27.330 回答
0

strcat 在目标中需要一个空字符,它将继续用源的第一个字符替换目标的第一个字符。检查 hdr 是否正确初始化。 http://www.cplusplus.com/reference/cstring/strcat/

于 2012-12-07T23:02:09.863 回答
0

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

于 2012-12-07T22:53:44.573 回答