fgets期间的段错误?

时间:2012-11-16 03:58:25

标签: c segmentation-fault fgets

这是我的代码:

    while (fgets(line, 1000, fp) != NULL) 
    { 
      printf("backin!");
      if ((result = strtok(line,delims)) == NULL)
        printf("Need from_id, to_id, and distance on each line of input file.\n");
      else
        from_id = atoi(result);
      printf("check!\n");
      if ((result = strtok(NULL,delims)) == NULL)
        printf("Need from_id, to_id, and distance on each line of input file.\n");
      else
        to_id = atoi(result);
      printf("check!\n");
      if ((result = strtok(NULL,delims)) == NULL)
        printf("Need from_id, to_id, and distance on each line of input file.\n");
      else
        distance = atof(result);
      printf("check!\n");
      printf("from_id: %d, to_id: %d, distance: %f",from_id, to_id, distance);
      if(BuildGraph(graph_array, from_id, to_id, distance) == -1)
        printf("Error while filling in graph type"); 
      printf("check!\n");
    }

所有这些printfs只是为了找到segfault发生的位置。输入文件长100行,此功能工作15次,完成所有检查,然后在“backin!”之前出现seg故障。在第16次迭代中打印。

我查看了输入文件并没有什么可疑的(肯定少于1000个字符),似乎只是fgets有问题,但我不知道是什么。

2 个答案:

答案 0 :(得分:2)

确保line的大小至少为1000个字符,或将代码更改为:

while (fgets(line, sizeof(line), fp) != NULL) 
...

您需要让line足够大以容纳最长的行或具有处理部分行的逻辑。

答案 1 :(得分:0)

您可以在正则表达式"%[^\n]s"的帮助下尝试使用fscanf。这将接受你的所有代币直到行尾字符。

  • 对问题不屑一顾,但仍然在printf后使用getch()练习。