char / Strings einlesen



  • Hallo!
    Frage zu folgendem Code:

    char datei;
    scanf("%s",&datei);
    pfile = fopen(&datei , "r");

    Ein Freund benutzt diesen so.
    Ich frage mich jedoch, ob "char datei" korrekt ist?! Schließlich will er als Dateinamen einen String eingeben können. Werden so nicht bei mehr als ein Zeichen langen Strings irgendwelche Speicherzellen überschrieben!?

    Danke für die Hilfe.

    Sgt. Nukem



  • is falsch. da paßt ja nur ein zeichen rein. dein freund ist dumm. :p



  • Mein Freund is' nich' dumm.

    Hat höchstens keine Ahnung von C-Kram.
    Ich häng' aber auch wat hinterher.

    Dat Problem is': ET FUNZT JA SO!
    Ich frage mich nur: Wird dann net irgendwat wichtiges geplättet so!?!

    Oder korrigiert dat wenigstens mal.
    Ich würd' mal sagen:

    char[] datei;
    scanf("%s",&datei);

    Richtig so!?

    Oder char* datei; ??

    Danke, Sgt. Nukem



  • die profis sagen dazu: undefiniertes verhalten. 🕶 es kann gut gehen, aber man sollte es wohl nicht drauf anlegen.

    char datei[42000]; // weiss ned wieviel speicher du brauchst
    scanf("%s",datei);
    


  • Ja, da wird was wichtiges geplättet. Wenn du speicher brauchst mußt du dafür sorgen dass du ihn kriegst, nicht einfach irgendwas besetzen.

    Das gilt generell: Sobald du irgendwas machst, was du nicht kontrollierst und wo dir niemand garantiert, dass es funktioniert, ist es falsch.

    Du kannst nicht wissen was für Variablen hinter der einen char stehen, die du dann überschreibst -> Fehler.

    Nimmst du ein Array was zu klein ist -> Fehler.

    Nimmst du einen blanken Zeiger (wie du vorgeschlagen hast char * datei), dann weißt du nicht wohin er zeigt -> Fehler.

    Wenn du das nicht verstehst, solltest du erstmal was einfacheres lernen als C.



  • oder C++ :p


Anmelden zum Antworten