如何在C中将文本文件中的字符串存储在数组中
我希望将文本文件读入字符串数组,并能够通过循环访问数组内容。我的代码允许我只存储文本文件的最后一行,而不是整个文件;我哪里做错了如何在C中将文本文件中的字符串存储在数组中,c,arrays,string,C,Arrays,String,我希望将文本文件读入字符串数组,并能够通过循环访问数组内容。我的代码允许我只存储文本文件的最后一行,而不是整个文件;我哪里做错了 #define MAX 10000 int main (int argc, char *argv[]) { FILE *fp; char str[MAX]; char *x[MAX]; int i =0; char y[MAX]; if((fp = fopen("550.txt", "r"))==NULL) {
#define MAX 10000
int main (int argc, char *argv[])
{
FILE *fp;
char str[MAX];
char *x[MAX];
int i =0;
char y[MAX];
if((fp = fopen("550.txt", "r"))==NULL) {
printf("Cannot open file.\n");
exit(1);}
while(!feof(fp)) {
while(fgets(str, sizeof str, fp)) {
x[i]= str;
printf("%s", str);
printf("%s", *(x+i));
i++;
}
}
for(i=0;i<100;i++){
printf("%s", *(x+i));
}
fclose(fp);
return 0;
}
#定义最大10000
int main(int argc,char*argv[])
{
文件*fp;
字符str[MAX];
字符*x[MAX];
int i=0;
chary[MAX];
if((fp=fopen(“550.txt”,“r”))==NULL){
printf(“无法打开文件。\n”);
退出(1);}
而(!feof(fp)){
while(fgets(str,sizeof str,fp)){
x[i]=str;
printf(“%s”,str);
printf(“%s”,*(x+i));
i++;
}
}
对于(i=0;i您只分配一个字符串数组str
。在循环的每次迭代中,您只需覆盖str
。赋值x[i]=str
将str
的指针值分配给x[i]
。您会注意到数组的每个成员x
都指向循环末尾的相同缓冲区str
。您需要创建多个缓冲区
一种方法是使用#定义行100
定义最大行数,然后声明x
,如下所示
char x[LINES][MAX];
然后在每次迭代时执行strcpy
:
while(fgets(str, sizeof str, fp)) {
strcpy(x[i], str);
printf("%s", str);
printf("%s", *(x+i));
i++;
}
注意,您应该考虑使用<代码> StrncPy < /Cult>方法,而不是<代码> StrcPy < /代码>,并检查返回值,以确保缓冲区不会溢出。
< P>您需要复制每个字符串:x[i] = strdup(str);
您目前正在做的是使每个x[i]
指向同一个缓冲区,一旦完成,该缓冲区将包含文件的最后一行
(注意:您还需要
free()
使用strdup()
创建的所有x[i]
字符串)您没有在任何地方对读取的行进行笔划。它会缓冲到str中,但会用下一行覆盖它。请使用strdup>
x[i] = strdup(str);
不要使用feof()来控制循环条件。您确定fgets不会为长输入零终止缓冲区吗?