Speicherzugriffsfehler in C++ (stdio.h - scanf())?

Das ist mein Programm:

#include <stdio.h>

int main(void)
{
char *test;
scanf("%s", test);
if(test == "Hallo")
printf("Du hast Hallo geschrieben");
return 0;
}

Wenn ich es kompiliere (g++) und ausführe und etwas eingebe, dann gibt er "Speicherzugriffsfehler" aus!
Muss ich vielleicht if(test == *"Hallo") oder sowas schreiben?

2009-04-12T06:05:58Z

Das gibts doch nicht! In diesem Forum gibts zwar viele Leute, aber fast keiner weiss etwas, das mal kein Allgemeinwissen ist! Arghh!!

Anonym2009-04-12T07:06:29Z

Beste Antwort

Du definierst eine Zeigervariable *test, die aber nicht initialisiert ist. Dieser Zeiger kommt vom Stack und zeigt daher irgendwohin - da es die main()-Funktion ist und vorher noch nichts passiert ist wahrscheinlich auf die Speicheradresse 0. Dieser Bereich ist aber geschützt, weshalb der Versuch, in diesen Speicherbereich per scanf() Daten einzulesen zu diesem Fehler führt.

Korrekt wäre:

int main(void)
{
char test[100];
scanf("%s", &test);
if(test == "Hallo")
printf("Du hast Hallo geschrieben");
return 0;
}