gpt4 book ai didi

c - 从 file.txt C 编程中读取其输入的字符串数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:22:43 24 4
gpt4 key购买 nike

我有一个问题,不知道是什么问题。

struct arrayDB {
char *user[MAX_SIZE];
char *pass[MAX_SIZE];
char db[10][2];
};

void readFile(char fileName[100])
{
char* word ;
char line[90];
FILE *passFile;
int rowC=0;
int chk=0;

passFile=fopen(fileName,"rt");
while(fgets(line,90,passFile)!=NULL)
{
word=strtok(line," ");
rowC=rowC+1;
while(word!=NULL)
{
printf("Count=%i \n",rowC);
if(chk==0)
{
printf("word:%s\n",word);
DB.user[rowC]=word;
chk=1;
}
else
{
printf("word:%s\n",word);
DB.pass[rowC]=word;

}
printf("r=%s , c=%s\n",DB.user[rowC],DB.pass[rowC]);
word=strtok(NULL," ");

}

chk=0;
}
int i;

for(i=1; i<6;i++)
{
printf("- %s , %s \n",DB.user[i],DB.pass[i]);
}

}

但是我得到的输出是所有数组元素都是相同的值,这是文件中的最后一个单词正如你在图片中看到的

enter image description here

谢谢

最佳答案

您正在将每一行读入同一字符串 line。然后,当您使用 strtok() 时,它会返回指向该字符串的指针,您会将这些指针存储到 DB 中。所以 DB 中的所有记录都指向 line 中的位置,每次您从文件中读取另一行时,它都会被覆盖。当一切都完成后,line 包含文件最后一行的内容,所有 DB 条目都指向它。

另一个问题是line是一个局部变量,当函数返回时指向它的指针就失效了。

要解决这两个问题,您需要复制字符串并将其存储在DB 中。例如:

        DB.user[rowC]= strdup(word);

这也意味着当你完成一个DB记录时,你需要调用free(DB.user[i])

关于c - 从 file.txt C 编程中读取其输入的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com