gpt4 book ai didi

C fgets() - 只将文件的最后一行写入数组?

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:02 25 4
gpt4 key购买 nike

我在使用 C 语言的 fgets() 时遇到了一个非常奇怪的问题。下面是我正在使用的代码。

FILE* conf_file;
char array[20];
conf_file=fopen("configuration","r");
if (!conf_file) printf("There is not conf file");
while(!feof(conf_file)){
// if( feof(conf_file)) break;
fgets(array,20,conf_file);
//printf("%s",array);
if (!read_id_flag){
labris_id=atoi(array);
read_id_flag=1;
printf("%d\n",id);
continue;
}
protocol_array[protocol_index]=array;
// printf("%s %s",array,protocol_array[protocol_index]);
protocol_index++;
}
int i;
for(i=0;i<10;i++){
printf("%s",protocol_array[i]);
}
fclose(conf_file);

好吧,在 while 范围内,如果我尝试打印 protocol_array,它会完美运行。但是如果我尝试在 while 作用域之后打印数组,它只会打印数组的最后一行 6 次(6 是文件中的行数)。

任何想法都会受到赞赏。提前致谢。

最佳答案

char* protocol_array[]; 除了指向已分配内存的指针外,不能直接包含任何数据。

您应该将 protocol_array 定义为 char protocol_array[20][6];,为 6 行长度为 20 的字符串和 strcpy 分配存储空间,如下所示:

char protocol_array[20][6];
//...
strcpy( protocol_array[protocol_index], array );

或者通过malloc分配内存:

char** protocol_array = malloc( 6 * sizeof( char* ) );
//...
protocol_array[protocol_index] = malloc( strlen(array)+1 );
strcpy( protocol_array[protocol_index], array );

请注意,在后一种情况下,您应该释放任何已分配的内存:

for( i = 0; i<protocol_index; ++i )
free( protocol_array[i] );
free( protocol_array );

关于C fgets() - 只将文件的最后一行写入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9564268/

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