' char* strInput =(char*) malloc(sizeof(char));
        int ch;
        int letNum = 0;
        while((ch = getchar()) != EOF){
                letNum++;
                strInput = (char*)realloc(strInput,letNum*sizeof(char));
                *(strInput + letNum - 1) = ch;
        }
        printf("\n");
        printf("%s\n",strInput);
        free(strInput);`

This is the contents of main in a program I wrote that takes an undefined number of chars and prints the final string. I don’t understand why but it only works if I press ctrl+D twice, and only once if I press enter before.

does anyone get what’s going on? And how would you have written the program?

  • @[email protected]OP
    link
    fedilink
    11 year ago

    Thanks a lot for your answer. This might be because of my shallow understanding of how a buffer works, but I don’t understand why EOF isn’t consumed by getchar() when the other bytes are consumed. Isn’t a char just a number and EOF too (-1 I think)? I probably should try and understand buffers more

    • @adriator
      link
      11 year ago

      When you press CTRL+D, first a signal is sent to the console to stop reading from the keyboard, then the EOF character gets added to the buffer. That’s why it is not consumed at the same time as the previous characters.