【问题标题】:C fscanf segmentation fault error "No source available for "flockfile() at 0x7fff855e6d39"C fscanf 分段错误错误“在 0x7fff855e6d39 处没有可用于“flockfile() 的源”
【发布时间】:2017-05-29 12:57:19
【问题描述】:

我目前正在处理 USACO 用 C 编写的一个旧编码问题。这是我代码的前几行,我尝试使用 fscanf() 函数来获取第一个值,int ,来自blocks.in 文件:

#include <stdio.h>
#include <stdlib.h>
int main() {
     FILE *fin  = fopen ("blocks.in", "r");
     FILE *fout = fopen ("blocks.out", "w");
     int i,j;
     int linecount = 0;
     int alphabetCount[26];
     fscanf(fin," %d",&linecount);

运行 gdb(作为 Eclipse C/C++ IDE 的一部分),我一直在线收到分段错误错误:

fscanf(fin," %d",&linecount);

错误始终显示为:

“flockfile() at 0x7fff855e6d39”没有可用的源代码

我无法找到问题的根源。过去我对此没有任何问题。您是否发现出了什么问题,或者有更好的解决方案/功能来提取数据?

【问题讨论】:

  • 也许fin = fopen ("blocks.in", "r") 失败了。在fscanf(fin," %d",&amp;linecount);之前测试if (fin)
  • 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here?What do I do when someone answers my question?

标签: c pointers segmentation-fault scanf


【解决方案1】:

我怀疑在您运行程序的目录中没有blocks.in 文件。即使文件存在,也可能无法成功打开。一些简单的错误检查可以帮助您避免这里的问题:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    FILE *fin;
    FILE *fout;
    int i,j;
    int linecount = 0;
    int alphabetCount[26];

    if ((fin = fopen("blocks.in", "r")) == NULL) {
        fprintf(stderr, "Unable to open input file\n");
        exit(EXIT_FAILURE);
    }
    if ((fout = fopen("blocks.out", "w")) == NULL) {
        fprintf(stderr, "Unable to open output file\n");
        exit(EXIT_FAILURE);
    }     

    fscanf(fin," %d",&linecount);

    return 0;
}

【讨论】:

  • 感谢您的回复。我确实在与程序相同的目录中有一个 blocks.in 文件。我过去编写的程序也采用了相同的程序,所以我认为情况不太可能。
  • @JordanAndo——很有趣。当我在系统上运行没有blocks.in 文件的代码时,会出现段错误。文件存在,没有问题。此外,通过错误检查(您应该始终这样做),即使没有文件存在,也没有段错误,只有错误消息。即使文件存在,也可能无法成功打开;我建议您在尝试其他任何操作之前添加错误检查。
  • 我添加了错误检查,结果发现文件没有正确打开。我重做了 blocks.in 文件,它似乎工作正常。感谢您的帮助!
猜你喜欢
  • 2017-03-29
  • 2015-02-09
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多