【问题标题】:segfault in basic C mkstemp code基本 C mkstemp 代码中的段错误
【发布时间】:2018-02-06 17:11:04
【问题描述】:

看来我完全误用了mkstemp。但是我使用它,我总是得到一个段错误。我用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的flags(完全没有,很多以前的flags的组合,-Wextra-O0
  • 通过将生成的文件描述符保存在int 中来更改代码,休眠 5 秒并再次关闭文件描述符。但我什至还没开始入睡……

现在我没有想法了......

【问题讨论】:

  • 贴出的代码,除了mkstemp()的参数无效外,还要检查(!=NULL))返回值以确保操作成功。

标签: c linux gcc posix


【解决方案1】:

来自手册页:

template 的最后六个字符必须是 "XXXXXX",它们是 替换为使文件名唯一的字符串。既然会 被修改,template 不能是字符串常量,而应该是 声明为字符数组。

所以需要声明一个字符数组:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多