看来我完全误用了mkstemp。不管我怎么用它,我总是会得到一个segfault。我用gcc -ggdb -Wall -Werror main.c编译了下面最基本的程序,并用./a.out运行它

#include <stdlib.h>

int main(int argc, char **argv) {
    mkstemp("XXXXXX");
    return 0;
}

它总是返回返回码139,并在终端上打印[1] 23532 segmentation fault ./a.out。(23532总是变化,因为它是pid)。
我试过:
切换gcc的标志(完全没有,以前的标志的许多组合,-Wextra-O0
通过在int中保存结果文件描述符、休眠5秒并再次关闭文件描述符来更改代码。但我连睡觉的时间都没有…
现在我没主意了…

最佳答案

从手册页:
template的最后六个字符必须是"XXXXXX",它们是
替换为使文件名唯一的字符串。因为它会
必须修改,template不能是字符串常量,但应该是
声明为字符数组。
所以需要声明一个字符数组:

char filename[] = "fileXXXXXX";
mkstemp(filename);

关于c - 基本C mkstemp代码中的segfault,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48648386/

10-11 15:25