9315


C言語で`xxxx yyyy`のような2組の文字列が複数並んだファイルを読み込み､線形リストに代入するとします｡  
そこで以下のコードを書いたのですが､おそらく`first`と`last`がそれぞれの行に対して同じ領域を指してしまっているので､それを使って線形リストを作っても､すべての線形リストの要素が同じ`xxxx`と`yyyy`になってしまいます｡
そうすれば､ちゃんとした線形リストを作れるのでしょうか?

[code]

    char first[MAX_NAME_LENGTH];
    char last[MAX_NAME_LENGTH];
    
    while(fscanf(fp, "%s%s", first, last)!=EOF){
            //線形リストへの格納処理
    }
    
[/code]


CC BY-SA 3.0
2015-04-19T08:15:03.383
9305
2015-04-19T12:57:50.070
7232
question
c
ファイルからの文字列の読み込みについて


おそらく`node->first_name = first`のようにしていると推測します。  
これは、同じバッファ`char first[MAX_NAME_LENGTH];` を指すことになるので、  
最後に処理した内容を指すことになります。  
なので、別の領域を用意し内容をコピーするというような処理が必要になります。  
具体的には次の様にします。  
(非標準関数`strdup`が利用できるのであれば単に`node->first_name =strdup(first);`のようにできます。)

[code]

    char *temp = malloc(strlen(first)+1);//別の領域を確保し
    if(temp == NULL){
        fprintf(stderr, "mallocに失敗しました\n");
        exit(EXIT_FAILURE);
    }
    strcpy(temp, first);//そこにコピーする
    node->first_name = temp;
    
[/code]

※malloc（strdupも同じ）で確保した領域は後で自分で開放する処理が必要です。


CC BY-SA 3.0
2015-04-19T12:57:50.070
9315
2015-04-19T12:57:50.070
5044
9305
answer