从.txt文件中读取文件并将特定行存储在字符串中

时间:2015-12-20 13:52:41

标签: c arrays file pointers

我有一个文本文档,如下所示:

#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

1 个答案:

答案 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
}

或者在读取后立即打印线条(只需要一个缓冲区)。