2017-04-01 116 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