Wie zu Lesen Eingabe unbekannter Länge mit fgets

Wie soll ich Lesen, lange Eingabe mit fgets() ich nicht ganz kapiert.

Schrieb ich diese

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char buffer[10];
    char *input;
    while (fgets(buffer,10,stdin)){
        input = malloc(strlen(buffer)*sizeof(char));
        strcpy(input,buffer);
    }
    printf("%s [%d]",input, (int)strlen(input));
    free(input);
    return 0;
}
Blick auf realloc. Und überlegen Sie eine Strategie der Verdopplung der Zuweisung jeder Zeit, wie auch die Lektüre direkt in den Puffer. BTW: Die printf-format für size_t ist %zu.
Wenn Sie es haben, sollten Sie mithilfe von getline statt fgets.
ich weiß, über getline, aber ich habe die Verwendung der Funktion fgets
ich sah Sie, aber ich dont verstehen, von der es, wie fgets funktioniert, was passiert, wenn die Eingabe länger ist, dann buffer ich angeben, macht es für mich warten, um Speicher zuzuweisen und speichern Sie es?
Dein code hat ein klassischer off-by-one Fehler in der malloc(). Mit strlen(str) ist fast immer falsch; Sie sollte fast immer strlen(str)+1. Ihre Schleife Speicherverluste schrecklich, zu; Sie überschreiben den vorherigen Zeiger gespeichert in input bei jeder iteration.

InformationsquelleAutor lllook | 2014-12-06

Schreibe einen Kommentar