Ich schrieb ein einfaches Programm, um eine Zeichenfolge zu lesen.Eine Zeichenfolge von stdin in c lesen
void main()
{
char *str; /*didn't allocate memory*/
scanf(" %s",str);
printf("%s",str);
}
Aber es verursacht einen Segmentierungsfehler. Wohingegen der nächste nicht ist.
void main()
{
char *str;
scanf(" %c",str);
printf("%c\n",str);
}
Würde es jemandem etwas ausmachen zu klären, wie das eigentlich funktioniert?
Lokale nicht statische Variablen haben einen * unbestimmten * Wert. Wenn Sie eine solche Variable haben, die ein Zeiger ist, und Sie es dereferenzieren, haben Sie * undefiniertes Verhalten *. Es gibt oft keine Möglichkeit vorherzusagen, was passieren wird. –
Aus Neugier habe ich dein zweites Programm kompiliert und ausgeführt. Es ist auch abgestürzt. Undefiniertes Verhalten kann sich auf verschiedenen Computer-, Betriebssystem- und Compiler-Kombinationen unterschiedlich manifestieren. –
"Würde es jemandem etwas ausmachen zu klären, wie das eigentlich funktioniert?" - * es nicht *; es ruft * undefiniertes Verhalten * auf. Du wurdest in eine weiche Idee des Erfolges eingelullt, weil du die Definition von "Arbeiten" so zu sein scheinst, dass das Programm einfach "nicht abstürzt". Fehlerhafte Programme, die ein undefiniertes Verhalten auslösen, können das sicher (oder auch nicht) tun, und wenn Sie * unglücklich * sind, können sie sogar * erscheinen *. Könnte schlimmer sein. Es könnte für Sie "gearbeitet" haben und nicht Ihr Ausbilder, Arbeitgeber oder schlimmstenfalls Kunde. – WhozCraig