2017-04-01 222 views
-2

有人能告訴我爲什麼struct中的變量被覆蓋?使用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

要懂得'結構person'實際上被定義可能會有幫助。 – alk

+0

它可能是'firstname'只是一個轉儲指針? – alk

+1

此外,這看起來更像C,不像C++。請確定,這是兩種不同的語言。 – alk

回答

0

你需要爲每一個結構的firstname財產分配內存。複製字符串只會複製指針。取而代之的

data[i - 1].firstname = buffor; 

你需要的東西是這樣的:

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

「*您需要爲每個結構體*分配內存」實際上OP完全是這樣做的。 ;-) – alk

+0

我明白了,非常感謝你的幫助。 – Dustin

+1

@alk。好的,那是錯字。更正:-) – user7771338