在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);
我想读取一个文件并将每一行存储在指针数组中。该文件有 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);