我正在使用 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];
关于c - 为什么在使用 snprintf 时会出现此代码的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149103/