NULL Abfrage funktioniert in keinem Fall

Gast #3151989
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.