我正在努力将文本文件逐行读入数组行。我不允许使用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);
}
我需要一个代码示例!非常感谢!
答案 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]
等等。