Es ist ziemlich schwer zu Wort meiner Frage so werde ich nur ein Code Beispiel:C-String Umfang zwischen Funktionen
#include <stdio.h>
typedef struct {
char *str;
} strHold;
void f2(char *s)
{
*s = "Char 2";
}
void f3(strHold *str)
{
(*str).str = "Struct 2";
}
int main()
{
char *s1 = "Char 1";
strHold str1;
str1.str = "Struct 1";
//f2(s1);
f3(&str1);
printf("%s, ", s1);
printf("%s", str1.str);
return 0;
}
dieses C-Programm läuft, und zeigt sogar „Struct 2“ auf dem zweiten Druck. Funktion f2 funktioniert jedoch nicht, wie in, wenn ich den Kommentar entfernen, stürzt das Programm ab. Ich bin eigentlich nicht überrascht, dass f2 nicht funktioniert, ich frage mich, warum funktioniert f3?
Wenn ich eine String-Konstante innerhalb eines Bereichs der Funktion definieren, sollten diese Daten freigegeben werden, sobald ich den Bereich der Funktion verlassen, oder? Was bedeutet, dass Daten in Müll umgewandelt würden, sobald ich in den aufrufenden Funktionsumfang zurückkomme.
Also ... wie funktioniert die Strukturversion? Kann jemand erklären, wie Speicher in diesen beiden Situationen funktioniert, und was ist der "richtige" Weg, Strings unbekannter Länge in einer aufrufenden Funktion von einer aufgerufenen Funktion zu initialisieren?
Sie bekommen viele Warnungen aus diesem Programm sein sollten, wenn sie bauen, lesen, versuchen zu verstehen, was sie bedeuten, und zu beheben, die Ursache der Warnungen (und durch „reparieren "Ich werfe die Warnungen nicht einfach weg." –
Erfahren Sie außerdem, wie Sie * by Referenz in c * emulieren. –