C - liest eine Zeile von der Standardeingabe mit fgets() in der Funktion

Ich versuche, liest eine Zeile von der Standardeingabe mit fgets(), will ich mit fgets() in meiner Funktion, die ich denke, dass ist das problem. Der string kann max 1024 chars lang. Wenn ich diesen code ausführen, ich erhalte die Meldung "Segmentation fault (core dumped)"

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

#define MAX_SIZE 1025

void print_fgets();

int main()
{
    print_select();
    return 0;
}

void print_select()
{
    char *str;
    int length;

    while (fgets( str, MAX_SIZE, stdin)!=NULL)
    {
        length=strlen(str);

        if (length==MAX_SIZE-1 && str[length-1]!='\n')
        {
             printf("Error, line overeached buffer!\n");
             return 1;
        }

        if (str[length-1]=='\n')
             str[length-1]='\0';
        printf("%s\n", str);
    }
}
  • wo werden Sie gehört?
  • Sie wusste nicht, reservieren Sie Speicher für str. das ist, warum.
  • Wie reservieren Sie Speicher? Ich bin neu in C.
  • siehe malloc () - Funktion (und deriviatives)
  • Für ein fixed-size-buffer, die man in der Regel weist s mit automatischer oder globalen Speicher: char s[MAX_SIZE]; oder static char s[MAX_SIZE]; wenn mehrere threads sind nicht ein Problem. Ihre Länge überprüft, sind auch völlig unnötig. fgets garantiert, dass Sie nicht den überlauf des Puffers.
  • Hinweis: In seltenen Fällen (Lesen von einer eingebetteten '\0'), str[0] == 0, dann str[length-1] außerhalb str. Empfehlen size_t len = strlen(str); if (len > 0 && str[len-1] == '\n') str[--len] = '\0';

InformationsquelleAutor Krop | 2014-11-03
Schreibe einen Kommentar