簡體   English   中英

C fgets()-僅將文件的最后一行寫入數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM