Forum: Compiler & IDEs NULL Abfrage funktioniert in keinem Fall


von Frank (Gast)


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);

von MaWin (Gast)


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.

von Frank (Gast)


Lesenswert?

Das printf("NULL") wird aber niemals ausgegeben.

von Frank (Gast)


Lesenswert?

Auch nicht wenn ich 50 Zeichen (MAX = 30) eingebe.

von Rolf M. (rmagnus)


Lesenswert?

Hast du die Antwort von MaWin überhaupt gelesen?

von Frank (Gast)


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

von g457 (Gast)


Lesenswert?

> Also NULL wenn MAX erreicht.

Nein. Wenn Dateienede.

von Frank (Gast)


Lesenswert?

g457 schrieb:
> Nein. Wenn Dateienede.

Achso, und der Dateiende ist erst dann wenn teht Z ?

von Rolf M. (rmagnus)


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.

von Frank (Gast)


Lesenswert?

Ok, danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.