在C中读取文件时字符串的指针数组

Array of pointers for string while reading file in C

我想读取一个文件并将每一行存储在指针数组中。该文件有 4 行,每行有 4 个字符。我使用 fgets 读取每一行并将该行分配给我的指针数组。虽然赋值我可以正确地写行但是在循环之后(用于读取文件)结果不正确。 NUM_VOWELS 是 4,MAX_SIZE 是 20,它们被定义为宏

我的主要是:

int main(void)
{
    FILE *file_vowels;
    int i, line_count = 0;
    char *vowels[NUM_VOWELS]; // my array of pointer
    char line[MAX_SIZE], *status;

    file_vowels = fopen(FILE_VOWELS, "r");
    for(
        status = fgets(line, MAX_SIZE, file_vowels);
        status != NULL;
        status = fgets(line, MAX_SIZE, file_vowels)
        )
    {
        if(line[strlen(line) -1] == '\n')
            line[strlen(line) -1] = '[=10=]';

        vowels[line_count] = line;
        printf("vowels[%d] : %s\n", line_count, vowels[line_count]);
        line_count++;

    }
    printf("=====================\n");

    for(i = 0; i < NUM_VOWELS; ++i)
        printf("vowels[%d] : %s\n", i, vowels[i]);

    return 0;
}

这是结果:

enter image description here

这是示例文件:

enter image description here

vowels[line_count] = line;

只有一个 line 数组,您将其地址分配给 vowels[line_count]。结果,每个 vowels[i]line 包含最后读取的文件行。尝试

vowels[line_count] = strdup(line);

以后别忘了free(vowels[i])

另一个解决方案

char vowels[NUM_VOWELS][MAX_SIZE];
...
strcpy(vowels[line_count], line);