【问题标题】:How do I read a file into an array of lines in C? [duplicate]如何将文件读入 C 中的行数组? [复制]
【发布时间】:2012-10-08 21:16:51
【问题描述】:

可能重复:
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);
}

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

【问题讨论】:

  • 好像是静态数组,不是动态分配的。

标签: c arrays


【解决方案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],等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2020-10-23
    相关资源
    最近更新 更多