[英]C fgets() - Only last line of the file is written to array?
我在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];
,為長度為20和strcpy的6行字符串分配存儲,如下所示:
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 );
請注意,在后一種情況下,完成后應free
所有分配的內存:
for( i = 0; i<protocol_index; ++i )
free( protocol_array[i] );
free( protocol_array );
protocol_array [protocol_index] = array; -這行似乎是問題所在。 您應該做一個strcpy。
如果您每次都繼續分配array,則只有array(本地數組)的地址存儲在protocol_array的所有元素中。 從您的代碼可以明顯看出,最后讀取的行將出現在“數組”中,並且由於protocol_array的所有元素都指向“數組”的地址,因此它僅對所有元素進行打印。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.