【发布时间】:2014-12-03 05:41:11
【问题描述】:
我正在逐个字符地读取文件。当我到达冒号时,我想跳过所有字符,直到到达换行符。实际上,在看到冒号后,我希望跳到下一行(如果存在另一行)。 看起来很简单,但是当我尝试跳出第二个 while 循环时,我收到了一个 sigsegv,它跳过了我不关心的数据。
没有中断,代码的行为就像我期望的那样(尽管不是我想要的输出)。也就是说,它读取数据直到第一个冒号,然后它会跳到EOF并退出。
5 FILE *fp = fopen("myFile", "r");
6 char *string = (char*) malloc(sizeof(char));
7 char *head = string;
8 if( fp ){
9 int c;
10 while( (c=fgetc(fp)) != EOF ){
11 if(c == ':'){
12 *string++ = '\n';
13 while( (c=fgetc(fp)) != EOF ){
14 if( c == '\n' ) // Skip to end of line
15 break; //removing break avoids sigsegv
16 }
17 }else{
18 *string++ = c;
19 }
20 }
21 }
似乎当我跳出循环时,c 或 fp 以某种方式被修改,导致 sigsegv。我最好的猜测是fp 以某种方式被修改并在父fgetc() 调用fp 时生成此错误。不过,除此之外,我不确定是什么导致了这个问题。
【问题讨论】:
-
使用 gdb(或类似的调试器)会极大地帮助您找出问题的根本原因。
标签: c segmentation-fault fgetc