C Buffer overflow? Was stimmt an diesem Quelltext nicht?

foggy80

Lt. Commander
Registriert
Juli 2008
Beiträge
1.034
Hallo,
Code:
# include <stdio.h>

int main (void) {
    char puffer [1000];
    fscanf (stdin, "%s", puffer);
    fflush (stdin);
    printf ("%s\n", puffer);
    char a;
    fscanf (stdin, "%c", a);
    fflush (stdin);
    return 0;
}

Wenn ich dieses Programm starte und ich bei der Zweiten Eingabemöglichkeit einen char eintippe, stürzt das Programm ab.
Wieso?
Danke für die Hilfe =)
foggy
 
Zuletzt bearbeitet:
ich würde mal vermuten das da sowohl a als auch ein "\0" versucht wird in deine char variable zu schreiben...
Es könnte auch ein "\n" für Carriage Return sein. Aber wie gesagt nur eine Vermutung...
 
Habe den Quelltext nun umgeändert
Code:
# include <stdio.h>

int main (void) {
    char puffer [1000];
    fscanf (stdin, "%s", puffer);
    fflush (stdin);
    printf ("%s\n", puffer);
    char a[B][COLOR="Red"][3][/COLOR][/B];
    fscanf (stdin, "%c", a);
    fflush (stdin);
    return 0;
}

und es funktioniert, also könntest du Recht haben.

EDIT:
Code:
# include <stdio.h>

int main (void) {
    char puffer [1000];
    fscanf (stdin, "%s", puffer);
    fflush (stdin);
    printf ("%s\n", puffer);
    char a;
    fscanf (stdin, "%c", [COLOR="Red"]&[/COLOR]a);
    fflush (stdin);
    return 0;
}

das müsste der Fehler gewesen sein.
 
Zuletzt bearbeitet:
fscanf() benötigt einen Pointer als 3. Parameter.
Code:
    char a;
    fscanf (stdin, "%c", a);
Hier übergibst du einen char, das Programm interpretiert den Wert des chars als Adresse, versucht mit hoher wahrhscheinlichkeit irgendwo hin zu schreiben, wo es nicht darf, und stürzt ab.

Korrigiert sieht das also folgendermaßen aus:
Code:
    fscanf (stdin, "%c", &a);


Hier übergibst du einen Pointer, daher stürzt das Programm nicht ab:
Code:
    char a[3];
    fscanf (stdin, "%c", a);
Verschwendet allerdings 2 Byte Speicher :)

(Chars werden nicht mit \0 abgeschlossen, und wenn nur ein einzelnes char gelesen werden soll, dann wird auch nur ein einzelnes char gelesen - daran lags also garanteirt nicht ;) )

EDIT: Mist, zu lange zum schreiben gebraucht :P
 
Zurück
Oben