C fgetc sigsegv - 跳到行尾

标签 c segmentation-fault fgetc

我正在一个字符一个字符地读取文件。当我遇到冒号时,我想跳过所有字符,直到遇到换行符。实际上,在看到冒号后我希望跳到下一行(如果存在另一行)。 看起来很简单,但是当我尝试跳出我的第二个 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    }

似乎当我跳出循环时,cfp 以某种方式被修改导致 sigsegv。我最好的猜测是 fp 以某种方式被修改并在父级 fgetc() 调用 fp 时生成此错误。不过,除此之外,我不确定是什么导致了这个问题。

最佳答案

您需要为string 分配更多字节。这一行:

char *string = (char*) malloc(sizeof(char));

仅为您的字符串分配一个字节。

关于C fgetc sigsegv - 跳到行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27264449/

相关文章:

c - C 中的空字节和数组

检查空指针在 C 中不起作用(给出段错误)

c++ - 调用函数时出现段错误

C-将字符串保存到数组并打印字符

c - 如何使用 fgetc() 计算单词的唯一数量然后在 C 中打印计数

c - 将多态函数作为参数传递给 C 中的另一个函数

c - MATLAB(linux) 找不到 gcc

c - 在 C 中使用 fgetc() 读入数组

c - 使用 fgetc 时是否可能将 EOF 与正常字节值混淆?

c - 语法:typedef 和 struct 标记解释