NULL Abfrage funktioniert in keinem Fall

Gast #3151989
Lesenswert?

Die FUnktion fgets liefert einen char pinter zurück, welcher NULL 
zurückgibt, falls die eingelesenen Zeichen mehr sind als der Funktion 
fgets vorgegeben. Die Abfrage funktioniert aber schlicht und ergreifend 
nicht, es wir dimmer der String abgeschnitten, und NULL wird zwar 
zurückgegeben, da die Schleife beendet wird, aber ich kann irgendwie 
nicht abfragen ob die NULL zurückgegeben wurde oder nicht.
1
char *pruef;
2
    do{
3
        printf("\n\nBitte geben Sie einen Text ein:");
4
        pruef = fgets(&str[0], MAX, stdin);
5
        if(pruef == NULL)
6
            printf("NULL");
7
    }while(pruef == NULL);
Gast #3151995
Lesenswert?

Fgets liefer nur genau dann NULL zurück wenn das Dateiende der 
Eingabedatei erreicht ist, man also auf der Konsole ^Z als einziges 
Zeichen eingibt.
Wenn der Puffer nicht für alle Zeichen reicht, liefert sie nur so viel 
wie angegeben, dein Beispiel läuft also korrekt.
Gast #3152025
Lesenswert?

MaWin schrieb:
> Fgets liefer nur genau dann NULL zurück wenn das Dateiende der
> Eingabedatei erreicht ist

Also NULL wenn MAX erreicht.

MaWin schrieb:
> man also auf der Konsole ^Z als einziges
> Zeichen eingibt.

Das verstehe ich noch nicht ganz

MaWin schrieb:
> Wenn der Puffer nicht für alle Zeichen reicht, liefert sie nur so viel
> wie angegeben, dein Beispiel läuft also korrekt.

Ja, ich will aber wissen, ob der Puffer dazu reicht oder nicht
#3152059
Lesenswert?

Frank schrieb:
> MaWin schrieb:
>> Fgets liefer nur genau dann NULL zurück wenn das Dateiende der
>> Eingabedatei erreicht ist
>
> Also NULL wenn MAX erreicht.

Nein:

MaWin schrieb:
> Wenn der Puffer nicht für alle Zeichen reicht, liefert sie nur so viel
> wie angegeben

Also nicht NULL wenn MAX erreicht.

> MaWin schrieb:
>> Wenn der Puffer nicht für alle Zeichen reicht, liefert sie nur so viel
>> wie angegeben, dein Beispiel läuft also korrekt.
>
> Ja, ich will aber wissen, ob der Puffer dazu reicht oder nicht

fgets() liest bis zum Zeilenende und speichert das dann mit ab, es sei 
denn, der Puffer ist nicht groß genug. Dann speichert es nur soviele 
Zeichen, wie reinpassen.
Wenn also am Schluß deines Strings ein \n steht, hat der Puffer 
gereicht, sonst nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren