如何将文件读入C中的行数组?

时间:2012-10-08 21:16:51

标签: c arrays

  

可能重复:
  reading a text file into an array in c

我正在努力将文本文件逐行读入数组行。我不允许使用malloc或相关命令。我找到的最新代码就是这个,它不起作用:

void readfile(const char *filename) {
FILE *f;
f = fopen(filename, "r");
int linecount;
char inputError;
char a[500];
char array[50];
//struct cal_event one[200];

linecount = 0;
while(inputError != EOF) {
    inputError = fscanf(f, "%s\n", array);
    linecount++;
}
fclose(f);
char names[linecount][500];

f = fopen(filename, "r");
int i;
for(i = 1; i < linecount; i++)
    fscanf(f, "%s", names[i]);
    printf("%s ", names[i]);
fclose(f);
}

我需要一个代码示例!非常感谢!

1 个答案:

答案 0 :(得分:1)

while(inputError != EOF) {
    inputError = fscanf(f, "%s\n", array);
    linecount++;
}

fscanf的'目标'指针对于每次循环迭代都是相同的。这意味着每次迭代都会将数据写入同一位置,覆盖以前的内容。您需要跟踪缓冲区内容的 end ,并使用指向缓冲区末尾的指针作为“目标”指针。

跟踪缓冲区内容的结尾意味着您可以执行另一项非常重要的事情:确保不会溢出数组。由于您的阵列硬编码为50个字符,因此您必须确保读取的字符数不超过50个字符(总计)。否则,你会破坏记忆,并且会发生各种各样的坏事。

根据您的标题,您似乎想要将文件读入数组,以便每个数组元素都是一个字符串(表示一行文本)。由于字符串本身就是一个数组,因此您需要将array对象作为数组数组。您也可以将其称为二维数组。例如:

char array[50][100];

这将创建一个能够容纳50行文本的数组,其中每行最多可包含100个字符。然后,您可以将第一行读入array[0],将下一行读入array[1]等等。