Hier ist ein Codebeispiel durch meine Frage gefolgt:Ist diese C-Strukturzuweisungsanweisung zulässig?
#include <stdio.h>
#include <string.h>
struct st {
char stringField[100];
int intField;
};
typedef struct st st;
void test(st *parameterStruct)
{
st localStruct;
strcpy(localStruct.stringField, "HELLO");
localStruct.intField = 5;
*parameterStruct = localStruct;
}
int main()
{
st myStruct;
strcpy(myStruct.stringField, "XXX");
myStruct.intField = 9;
printf("%s,%i\n", myStruct.stringField, myStruct.intField);
test(&myStruct);
printf("%s,%i\n", myStruct.stringField, myStruct.intField);
return 0;
}
OUTPUT:
XXX,9
HELLO,5
Ich dachte, dass da die Struktur ‚localStruct‘ wurde in einer Funktion erstellt (NICHT malloc) hatte Der lokale Bereich und damit die Speicherorte, in denen er gespeichert wurde, konnten nach der Ausführung der Funktion überschrieben werden. Ich habe jedoch versucht, dieses Beispielprogramm auszuführen, und es wurde ohne Probleme ausgeführt. Ich dachte, dass die zweite Druckanweisung Gibberish auf den Bildschirm drucken würde, da ich 'myStruct' der lokalen Variablen 'localStruct' zugewiesen hatte (im Gegensatz zu 'localStruct', das dynamisch zugewiesen wurde). Ich weiß, wenn 'localStruct' mit malloc erstellt wurde, würde es keine solchen Probleme geben.
Meine Frage: Ordnen Sie die Strukturvariable 'myStruct' (eine nicht dynamische lokale Variable) y mit einem Zeiger im Funktionstest in Ordnung und sicher zu tun? Ich hoffe, dass die Frage klar ist.
Gut geschriebene Frage mit SSCCE, Sie guten Herr verdienen eine +1. –
(Nur Nitpick: vielleicht kann der Titel zu etwas weniger allgemein verbessert werden?) – usr2564301