Как я могу прочитать несколько входов из стандартного ввода в c с помощью Fgets - PullRequest
0 голосов
/ 09 апреля 2020

Я попробовал этот код и написал другой аналогичный для чтения другого ввода, но программа прочитала во второй раз и первый, и второй stdin (также я использовал fflu sh (stdin) вместо fseek (), но это тоже не сработало)

     int BUFFERSIZE=100;
     char input[BUFFERSIZE];
     char *final=malloc(1);
     while(fgets(input,BUFFERSIZE-1,stdin))
     {
         final=realloc(final,strlen(final)+strlen(input)+1);
         strcat(final,input);
         if(input[strlen(input)-1]=='\n') break;

     }
     sscanf(final,"%d",&opt);
     free(final);
     fseek(stdin,0,SEEK_END);

1 Ответ

0 голосов
/ 09 апреля 2020

Вы не инициализировали содержимое буфера final до l oop. Таким образом, первые strlen(final) и strcat(final, input) читают неинициализированную строку, вызывая неопределенное поведение.

     int BUFFERSIZE=100;
     char input[BUFFERSIZE];
     char *final=malloc(1);
     *final = 0; // initialize to empty string
     while(fgets(input,BUFFERSIZE-1,stdin))
     {
         final=realloc(final,strlen(final)+strlen(input)+1);
         strcat(final,input);
         if(input[strlen(input)-1]=='\n') break;

     }
     sscanf(final,"%d",&opt);
     free(final);
...