我有一个文本文档,如下所示:
#Something
info1
#Something
info2
#Something
info3
现在我想阅读此文件并跳过以#
开头的所有行,并将正常字符串存储在char
数组中。
我试过了:
void ReadFromFile()
{
char *info1;
char *info2;
char *info3;
char str[200];
int line1;
FILE *fp;
fp = fopen("game:\\Config.txt", "r");
if(!fp)
return;
while(fgets(str,sizeof(str),fp) != NULL)
{
line1++;
int len = strlen(str)-1;
if(str[len] == '\n')
str[len] = 0;
printf("%i", line1);
if(line1 == 2)
{
printf("%s", str);
info1 = str;
}
if(line1 == 4)
{
printf("%s", str);
info2 = str;
}
if(line1 == 6)
{
printf("%s", str);
info3 = str;
}
printf("\n");
}
fclose(fp);
printf("\n");
printf("%s\n", info1);
printf("%s\n", info2);
printf("%s\n", info3);
}
当我运行时,我得到输出:
1
2info1
3
4info2
5
6info3
info3
info3
info3
知道为什么这不起作用?我希望输出为:
1
2info1
3
4info2
5
6info3
info1
info2
info3
答案 0 :(得分:3)
所有这些指针:
char *info1;
char *info2;
char *info3;
指向同一个缓冲区(每次通过这些指针写入都会覆盖以前的内容):
char str[200];
你必须制作三个独立的缓冲区:
char str1[200];
char str2[200];
char str3[200];
或者:
char str[3][200];
while(int i = 0; fgets(str[i], sizeof(*str), fp) != NULL; )
{
// increment i if line without # was read
}
或者在读取后立即打印线条(只需要一个缓冲区)。