【问题标题】:read line by line of file and store in C逐行读取文件并存储在C中
【发布时间】:2017-09-17 23:47:04
【问题描述】:

我无法在 C 中使用 getline。我想读取每一行并将其存储到一个数组中。所以我能够读取每一行,打印出每一行并打印每行中的字符数。

我在运行我的程序时遇到了问题 它不会打印出行数和文件,它不会停止它只是在打印文件的所有行之后保持原样。

我也不知道如何将行存储到数组中。任何帮助/提示将不胜感激!!!

int main(int argc, char *argv[])
{
  int line_count=0;
  int charac_count;
  int count=0;

  char line[81];    
  char *lineptr;
  lineptr=(char*)malloc(sizeof(char)*81);
  int lineptr_size=81;  
  if(!lineptr)
  {
     printf("malloc memory error\n");
     exit(EXIT_FAILURE);
  }     

  if(argc !=3)
  {
    printf("Number of parameters is incorrect.\n");
    exit(EXIT_FAILURE);
  }

  FILE *r; 

  r=fopen(argv[1], "r");
  if(r==NULL)
  {
      printf("File cant be open\n");
      exit(EXIT_FAILURE);
  }


  charac_count=getline(&lineptr, &lineptr_size, r);
  while(charac_counter!=EOF)
  {


        if(charac_count!=-1)
        {
            puts(lineptr);
            printf("%i\n", charac_count);
        }
        line_count++;
        break;


  }


  printf("%i\n", count);
  fclose(r);
  free(lineptr);
  return 0;

}

【问题讨论】:

  • 1) while(r){...} :这是一个无限循环。
  • r 永远不会是'null',它是文件指针
  • @Les 这是不正确的。如果文件无法打开,fopen 返回 null。
  • @Gene - 抱歉,我正在跟进 BLUEPIXY 和无限循环语句。即,我的意思是,在循环中,r 永远不能为空。它已经过测试。并且 OP 只是更改了代码,所以它现在是一个静音点。
  • @rihannon - 尝试在调试器中运行您的代码,如果您不知道如何工作,那将是您接下来学习的好东西。

标签: c arrays file getline


【解决方案1】:

正如@BLUEPIXY 提到的,你有一个无限循环。尝试这样的事情:

while((charac_count=getline(&lineptr, &lineptr_size, r))!=EOF)
  {
        if(charac_count!=-1)
        {
            puts(lineptr);
            printf("%i\n", charac_count);
        }
        line_count++;
        break;
  }

【讨论】:

  • 我能够使用 0x11 代码打印出我的文本,但我注释掉了中断。
  • 是的,甚至没有注意到里面的break。希望没有它也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2021-07-13
  • 2014-08-27
  • 2022-01-25
  • 2016-06-19
  • 1970-01-01
  • 2010-12-24
相关资源
最近更新 更多