c - 在C中逐行读取文件

标签 c arrays file line storage

我正在尝试编写一些代码来打开一个文件,逐行读取其内容并将每一行存储到一个数组中。

首先我打开文件并计算行数,每行的长度都是固定的,所以我只需这样做:

    char buf2[LINE_LENGTH];
    int in2 = open("toSend2", O_RDONLY);
    int number_of_lines = 0;

    for (;;)
 {
  char* p2 = buf2;
  int count = read (in2, p2, LINE_LENGTH);
  if (count < 0)
  {
    printf("ERROR");
    break;
  }
  if (count == 0) break; 

  number_of_lines++;

  printf("count: %d \n",count);
  printf("File 2 line : %s", p2);
  printf("\n");

 }
 close (in2);

到目前为止,这很有效,number_of_lines 确实是文件“toSend2”中的行数,我的每个 printf 都是该文件中包含的行。

现在有了行数,我创建了一个字符串数组,然后我基本上再次遍历了整个文件,但这次,我想将每一行存储在数组中(可能有更好的方法来查找输出文件中的行数,但我尝试的一切都失败了!)

    char * array[number_of_lines];
    int b=0;
    int in3=0;
    in3 = open("toSend2", O_RDONLY);
    for (;;)
 {
  char* p3 = buf3;
  int count = read (in2, p3, LINE_LENGTH);
  if (count < 0)
  {
    printf("ERRORRRRRR");
    break;
  }
  if (count == 0) break;


  array[b] = p3;
  b++;

  printf("count: %d \n",count);
  printf("FILE 2 LINEEEEEE : %s", p3);
  printf("\n");

 }  
 close(in3);

这当然行不通:我的每个 printf 都是正确的行加上文件的最后一行,例如,第一个 printf 将是:

FILE 2 LINEEEEEEE:“文件的第一行” “文件的最后一行”

在这个 for 循环之后,当我跟踪数组的内容时,其中的每一项都只是文件的最后一行。我认为这是因为我只是每次都在数组中放置相同的指针(当时指向不同的行),但最后它会指向最后一行,因此所有内容都将是最后一行。

我该如何解决我的问题?

p.s.: 我刚开始学 C,所以请不要以为我知道它的基本知识:(

最佳答案

  • 使用 stdio,即 fopen()fgets()fclose() 来执行 I/O。您无缘无故地使用低级别的 Posix 样式 I/O。
  • 您需要动态分配每一行,以便将其存储在数组中。您可以使用 strdup() 来执行此操作。
  • 请记住,事情可能会出错;文件可能无法打开,行可能无法读入,内存可能无法分配。检查这一点,并采取相应行动。

关于c - 在C中逐行读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1861007/

相关文章:

c++ - C 和 C++ : data file with error "Expected unqualified-id"

c - 对大型数组进行排序(快速排序)- 段错误

arrays - 如何在 C 中创建一个具有负下界和正上限的二维数组?

java - JAVA从文本文件读取到多个数组

c - 为什么我们需要 strdup()?

c - 即使在 C 中使用#include <string.h>,strlen 也不起作用

将负数从 String 转换为 unsigned Long

php - 使用 PHP 从 JSON 数组解析营业时间、时段和工作日

c - 如何在 C 中以已知格式逐行读取文件

java - Java从多个文件夹读取多个txt文件