【问题标题】:How to write to file from char[][]?如何从 char[][] 写入文件?
【发布时间】:2011-08-31 14:47:59
【问题描述】:

我正在将数据收集到一个 char[][] 数组中,然后让用户选择将哪些字符串写入文件。所以我在做例子

char arr[3][3]; // assume there are three different two-char long strings in there
FILE* f = fopen("file", "w");
fputs(arr[1], f);
fclose(f);

现在的问题是,我在fputs() 调用中遇到了段错误,我不知道为什么。

有什么想法吗?

【问题讨论】:

  • 您是否检查了fopen 返回的文件指针以确保它不为NULL?假设 arr 包含 3 个两个字符的长字符串,这是我能想到的唯一会导致 fputs 呕吐的事情。
  • @John Bode 请将其放入答案中,以便我接受。我根本没想过会丢失文件的权限。

标签: c arrays segmentation-fault fputs


【解决方案1】:

确保fopen 返回的文件指针不为NULL;假设 arr 包含有效的以 0 结尾的字符串,这是我能想到的唯一另一件事会导致 fputs 出错。

【讨论】:

    【解决方案2】:
    1. fputs 需要以\0 结尾的字符串。确保在您提供的字符串末尾添加0。或者使用fwrite

    2. 检查f != NULLfopen之后

    【讨论】:

    • 好吧对不起,我的字符串是零终止的。我认为这并不重要。
    • @Cobra_Fast:我仍然建议使用fwrite,在这种情况下它比 fputs 更好。你能告诉你如何填充数组吗?
    • NULL 终止字符串?? '\0' 终止字符串!!
    【解决方案3】:

    arr 指向什么?我猜这个问题是由于 arr 没有被初始化。

    【讨论】:

    • arr 不指向任何东西,它是一个数组。但你是对的,在示例代码中它没有被初始化。
    • 请阅读整个代码,我写的是假设里面有东西。
    【解决方案4】:

    arr[1] 指向的 char 数组可能不是以空值结尾的。您应该将arr 声明为char arr[3][4]; 并用'\0'(空)字符填充最后一列。

    【讨论】:

      【解决方案5】:

      也许你应该检查文件指针返回的值!

      【讨论】:

      • Oppz 对不起,我把他的问题弄错了,我后来明白了,我有点想他想要一个为错误答案道歉的角色!好吧,如果我的回答完全错误?
      • 好的,我很好地改变了我的代码我不知道你可以这样使用二维数组,所以我认为它可能是错误的
      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 2020-08-10
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多