c - 为什么我在使用 snprintf 时遇到此代码的段错误



我正在用 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];

相关内容

  • 没有找到相关文章

最新更新