【发布时间】:2021-07-19 07:55:25
【问题描述】:
我正在尝试编写这个函数,它将创建一个 HTML 文档,我可以在其中写入 404 错误消息,文件名在函数参数中给出。
fprintf 调用给了我分段错误,但核心转储。
对我做错了什么有什么想法吗?
void notFoundResponse(int clientSocket, char* fileName){
char response[30] = {"HTTP/1.0 404 Not Found\r\n\n"};
char buffer[256];
FILE* file = fopen("404.html", "w+");
fprintf(file, "<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD><BODY><H1>Not Found</H1>The requested URL %s was not found on this server.<P>\r\n" , fileName);
write(clientSocket, response, strlen(response) + 1);
fread(buffer, 256, 1, file);
write(clientSocket, buffer, strlen(buffer) + 1);
fclose(file);
}
【问题讨论】:
-
您需要
fclose/fopen或rewind文件文件才能再次读取它。并始终检查函数的返回值。你可能会发现fread返回 0。 -
或者
fopen可能已经失败并返回NULL,再次添加适当的错误检查。 -
strlen(buffer)有问题,因为它缺少空字符。 -
对于(例如)
write(clientSocket, response, strlen(response) + 1);将在末尾发送一个二进制 0x00。你确定那是你想要的吗?对于http的大部分内容,这会使收件人感到困惑。我愿意:write(clientSocket, response, strlen(response));
标签: c networking segmentation-fault