C语言HTTP服务器开发:配置文件字符串传递异常排查
问题分析
你遇到的段错误大概率是因为fgets读取配置文件时,把**换行符\n**也一并读进了index_loc数组里,而直接传入字符串常量"index.html"时没有这个换行符。setHttpHeader函数可能未处理带换行的字符串,导致后续字符串操作(比如拼接、查找)出现内存访问错误。
比如配置文件第二行的index.html后跟着换行,fgets会把"index.html\n\0"存入index_loc,而非你期望的"index.html\0"。
解决方案
在调用setHttpHeader之前,手动去除字符串末尾的换行符:
char index_loc[20]; char const* const fileName = "config.txt"; FILE* file = fopen(fileName, "r"); if(!file){ printf("\n Unable to open : %s ", fileName); return -1; } // 先读取端口号(确保跳过配置文件第一行) char port_buf[10]; fgets(port_buf, sizeof(port_buf), file); // 读取第二行的页面路径 if(fgets(index_loc, sizeof(index_loc), file) != NULL) { // 查找换行符并替换为字符串结束符 char* newline = strchr(index_loc, '\n'); if(newline != NULL) { *newline = '\0'; } } setHttpHeader(httpHeader, index_loc);
额外注意事项
- 确保
index_loc的长度足够容纳配置文件中的路径,避免缓冲区溢出 - 始终检查
fgets的返回值,确认成功读取到目标行内容
内容的提问来源于stack exchange,提问作者Saniaaa
相关产品推荐
相关产品推荐

