2017-04-01 17 views
-2

構造体の変数が上書きされている理由を教えてもらえますか?snprintfを使用して構造体を埋め込む

出力は次のようになります。

Buffor is: 1.name , struct is: 1.name 
Buffor is: 2.name , struct is: 2.name 
Buffor is: 3.name , struct is: 3.name 
3.name 
3.name 
3.name 
int i = 1; 
    char buffor[100]; 
    int n = 3; 

    struct person * data; 
    data = (struct person *) malloc(n * sizeof(struct person)); 

    while (i <= n) { 
     snprintf(buffor, sizeof(buffor), "%d.name", i); 
     data[i - 1].firstname =buffor; 
     printf("Buffor is: %s , struct is: %s \n", buffor, data[i - 1].firstname); 
     i++; 
    } 

    for (int i = 0; i < n; i++) { 
     printf("%s \n", data[i].firstname); 
    } 
    return 0; 
} 
+0

:代わりに

data[i - 1].firstname = buffor; 

のあなたは、このようなものが必要。 – alk

+0

'firstname'はダンプポインタに過ぎませんか? – alk

+1

また、これはCによく似ていますが、C++に似ていません。それらは2つの異なる言語です。 – alk

答えて

0

あなたはすべての単一構造体のfirstnameプロパティのメモリを割り当てる必要があります。文字列をコピーするだけでポインタがコピーされます。実際に定義されてperson`構造体が役立つかもしれない方法 `知るために

data[i - 1].firstname = (char*)malloc(strlen(buffor) + 1); 
strcpy(data[i - 1].firstname, buffor); 
+0

"*単一の構造体ごとにメモリを割り当てる必要があります*"実際OPはこれを正確に行いました。 ;-) – alk

+0

私は、大変ありがとうございます。 – Dustin

+1

@alk。さて、それはタイプミスでした。訂正しました:-) – user7771338

関連する問題