使用snprintf时为什么我会使用此代码获得段错误?

时间:2017-02-09 23:51:36

标签: c segmentation-fault printf

我正在使用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只在我第一次使用特定语法调用缓冲区时才会出现。有些请求不会创建段错误。如果我提交了导致段错误的请求,那么它们就不会再导致段错误。有什么见解吗?

1 个答案:

答案 0 :(得分:3)

您的缓冲区不是字符数组。它是一个字符指针的数组。您的编译器应该警告您类型不匹配。

将声明更改为:

char buffer[MAX_BUFFER_LENGTH];