-1

可能重复:
将文本文件读入 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);
}

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

4

1 回答 1

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

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

跟踪缓冲区内容的结尾意味着您可以做另一件非常重要的事情:确保您的数组不会溢出。由于您的数组被硬编码为 50 个字符,因此您必须确保读取的字符(总数)不超过 50 个。否则,您将破坏内存,并可能发生各种不好的事情。

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

char array[50][100];

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

于 2012-10-08T21:31:00.730 回答