我正在用 C 语言处理一个简单的 Web 服务器,每当我尝试写入我在另一个函数中 main 中声明的 char[] 时,我都会得到一个段错误。在任何人建议之前,我还没有将其声明为字符串文字。我尝试使用 malloc(( 进行分配,在初始化时将数组中的每个字符设置为空终止符,并且不将其初始化为任何东西(即在写入新内容之前不会读取它,因此没有理由最初将其归零为任何东西(,所有这些都无济于事。
正在发生的事情的语法如下:
#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);
}
奇怪的是,段错误仅在我第一次使用特定语法调用写入缓冲区时发生。有些请求不会创建段错误。如果我在未导致段错误的请求之后提交导致段错误的请求,则它们不再导致段错误。有什么见解吗?
缓冲区不是字符数组。 它是一个字符指针数组。 编译器应该警告您类型不匹配。
将声明更改为:
char buffer[MAX_BUFFER_LENGTH];