2017-04-01 2 views
-2

kann mir jemand sagen, warum Variablen in struct überschreiben?Mit snprintf, um Struktur zu füllen

Ausgabe lautet:

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

Um zu wissen, wie 'struct person' tatsächlich definiert helfen könnte. – alk

+0

Könnte es sein, "Vorname" ist nur ein Dump-Zeiger? – alk

+1

Auch das sieht eher aus wie C, nicht wie C++. Bitte entscheide, das sind zwei verschiedene Sprachen. – alk

Antwort

0

Sie müssen sich für firstname Eigenschaft jedes einzelnen struct Speicher zuzuweisen. Beim Kopieren von Strings wird nur der Zeiger kopiert. Statt

data[i - 1].firstname = buffor; 

müssen Sie etwas wie folgt aus:

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

"* Sie müssen Speicher für jede einzelne Struktur zuweisen *" tatsächlich hat das OP genau dies getan. ;-) – alk

+0

Ich sehe, vielen Dank für Hilfe. – Dustin

+1

@alk. Ok, das war ein Tippfehler. Korrigiert :-) – user7771338

Verwandte Themen