我正在使用C语言编写一个简单的Web服务器,每当我尝试写入我在另一个函数的main中声明的char []时,我就会遇到段错误。在任何人建议之前,我还没有将它声明为字符串文字。我已经尝试使用malloc()进行分配,在初始化时将数组中的每个char设置为null终止符,而不是将其初始化为任何东西(即,只有在写入新内容时才会读取它,因此没有理由将其归零它最初的任何事情,都无济于事。
正在进行的语法如下:
#define MAX_BUFFER_LENGTH 20
int some_function(char *buffer) { //many other params as well
//lots of other code
snprintf(buffer, MAX_BUFFER_LENGTH, "%s", "HTTP/1.0 404 Not Found"); // This is where the segfault is thrown
}
int main(int argc, char *argv[]) {
char buffer[MAX_BUFFER_LENGTH];
//many other declarations
//...
some_function(buffer);
}
奇怪的是,segfault只在我第一次使用特定语法调用缓冲区时才会出现。有些请求不会创建段错误。如果我提交了导致段错误的请求,那么它们就不会再导致段错误。有什么见解吗?
答案 0 :(得分:3)
您的缓冲区不是字符数组。它是一个字符指针的数组。您的编译器应该警告您类型不匹配。
将声明更改为:
char buffer[MAX_BUFFER_LENGTH];