我有这个代码,我想从每行的文本文件中读取,然后将其打印到标准输出。无缘无故,它只保存该字符数组中文件的最后一行。 任何提示为什么(一些解释)?
9 int main(){
10 FILE * f;
11 char buffer[255];
12 char * arr[255];
13 int i=0,n;
14
15 f = fopen("input.txt", "r");
16 while(1){
17 if(fgets(buffer,255,f) != NULL ){
18 arr[i++] = buffer;
19 }else break;
20 }
21 n=i;
22 for(i=0;i<n;i++){
23 printf("%s",arr[i]);
24 }
25
26 fclose(f);
27 return 0;
28 }
答案 0 :(得分:1)
您的程序只有一个缓冲区被文件的每一行覆盖
编辑:
char* buf;
while(1){
buf = malloc(255);
if(fgets(buf,255,f) != NULL ){
arr[i++] = buf;
}
else break;
}
答案 1 :(得分:1)
char * arr[255]
是一个指向255个字符数组的指针。分配arr[i] = buffer
时,您的指针指向buffer
,用于(未分配)数组的每个元素。因此,每个元素都将指向相同的char buffer[255]
,当您打印时,它将只包含最后一行。
答案 2 :(得分:1)
下面:
#include <cstdlib>
#include <string.h>
int main(){
FILE * f;
char buffer[255];
char * arr[255];
int i=0,n;
f = fopen("c:\\temp\\input.txt", "r");
while(1){
if(fgets(buffer,255,f) != NULL ){
arr[i] = (char *) malloc(255 * sizeof(char));
strcpy(arr[i++], buffer);
}else break;
}
n=i;
for(i=0;i<n;i++){
printf("%s",arr[i]);
}
fclose(f);
for (int j=0; j<i; j++)
free(arr[j]);
return 0;
}
答案 3 :(得分:-1)
你永远不会增加我。在你的阅读循环中,你保存为0然后是i ++。但它并没有将新的i值保存到i中。因此,对于下一次迭代,您的i为0。您需要在“arr [i ++] = buffer;”
之后添加“i = i + 1”