基本C mkstemp代码中的segfault

Gar*_*aro 0 c linux gcc posix

看来我完全在滥用mkstemp。但是我使用它,总是会遇到段错误。我使用编译了以下最基本的程序,gcc -ggdb -Wall -Werror main.c并使用./a.out

#include <stdlib.h>

int main(int argc, char **argv) {
    mkstemp("XXXXXX");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这始终返回返回码139,并[1] 23532 segmentation fault ./a.out在终端上打印。(23532因为它是pid,所以总是会更改)。

我试过了:

  • 切换的标志gcc(完全没有,以前标志的很多组合-Wextra-O0
  • 通过将生成的文件描述符保存在中来更改代码int,休眠5秒钟,然后再次关闭文件描述符。但是我什至还没睡到开始...

现在我没主意了...

Bar*_*mar 5

从手册页:

的最后六个字符template必须为,"XXXXXX"并将这些替换为使文件名唯一的字符串。由于将被修改,template因此不能为字符串常量,而应声明为字符数组。

因此,您需要声明一个字符数组:

char filename[] = "fileXXXXXX";
mkstemp(filename);
Run Code Online (Sandbox Code Playgroud)