0

这是我的代码:

    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 只是为了定位段错误发生的位置。输入文件有 100 行长,这个函数工作了 15 次,完成了所有的检查,然后在 "backin!" 之前 seg faults 在第 16 次迭代时打印。

我查看了输入文件,并没有任何可疑之处(绝对少于 1000 个字符),似乎 fgets 有问题,但我不知道是什么。

4

2 回答 2

2

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

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

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

于 2012-11-16T04:47:28.493 回答
0

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

  • 与问题无关,但仍然在 printf 之后练习使用 getch()。
于 2012-11-16T06:11:29.967 回答