c - 为什么在使用 snprintf 时会出现此代码的段错误?

标签 c segmentation-fault printf

我正在使用 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/

相关文章:

c - 没有编译器优化的 FFMPEG 编译

c - 如何在运行时检查内存地址是否可写?

c - 分配某个变量后,双指针的地址被删除

android - 防止 WebView 中的 Flash Player 故障,就像 Android 浏览器所做的那样

我可以在不损失精度的情况下打印完全可表示的 float 吗?

c++ - RapidXML:无法打印 - 编译时错误

c++ - 在 Xcode 8.3 更新中,C/C++ 编程 printf 不会给出没有换行符的输出

c - 检测 C 中整数的溢出

c - 将 C 语句翻译成 MIPS 汇编指令?

windows - 在 Windows 上的内存区域上设置 PAGE_NOACCESS 和 VirtualLock