首页 > 解决方案 > 为什么 fprintf 给出分段错误?

问题描述

我正在尝试编写此函数,该函数将创建一个 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);
}

标签: cnetworkingsegmentation-fault

解决方案


有更多信息吗?

尝试修改char response[30] = {"HTTP/1.0 404 Not Found\r\n\n"};char response[64] = "HTTP/1.0 404 \r\nContent-Type: text/html\r\n\r\n"

也许你没有指定 Content-type,所以 HTTP 连接在你发送响应后关闭。我认为您应该指定 Content-type 来告诉客户端您稍后将发送一个 html 文件。

如果您非常确定这是 fprintf 段错误,请忽略我的回答。

如果我的回答严重错误,请评论并让我知道我将删除答案。


推荐阅读