【问题标题】:C: generate a bufferC:生成缓冲区
【发布时间】:2014-03-06 22:28:37
【问题描述】:

由于某种原因,我的标头没有正确生成。

我正在发送一个连接的套接字,以及一个文件名和响应代码 200。 但是,该方法不返回任何内容。

为什么?

void generate_header(int sock, char* filename, int response_code) {
  int i = 0;
  char buffer[BUFLEN];

  if (response_code == 200) {
    strncpy(buffer, "HTTP/1.1 200 OK\n", sizeof(buffer));
  } else if (response_code == 404) {

  } else if (response_code == 400) {

  } else {

  }

  strncpy(buffer, "Content-Type: text/html\n", sizeof(buffer) - strlen(buffer) - 1);
  strncpy(buffer, "Connection: close\n", sizeof(buffer) - strlen(buffer) - 1);
  strncpy(buffer, "\n", sizeof(buffer) - strlen(buffer) - 1);

  write(sock, buffer, strlen(buffer));


}

【问题讨论】:

  • 看起来你在第一个strncpy之后需要strncat
  • 就是这样! :) 又粗心了。
  • 顺便说一句,您的for 循环与printf("%s", buffer) 完全相同
  • @MattMcNabb:类似——但要慢一些。
  • @JonathanLeffler 您认为哪个较慢,并且您测量过...? ;-)

标签: c string cstring c-strings


【解决方案1】:

简单:strncpy 覆盖缓冲区之前保存的所有内容。

最后一个strncpy 只是放入了一个换行符,所以这就是将要打印的全部内容。

先清除缓冲区,然后改用strncat。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2021-01-04
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多