Чтение в строке неизвестной длины с консоли

Если я хочу прочитать строку из произвольной длины из командной строки, что лучше всего пойдет по ней?

На данный момент я это делаю:

char name_buffer [ 80 ]; int chars_read = 0; while ( ( chars_read < 80 ) && ( !feof( stdin ) ) ) { name_buffer [ chars_read ] = fgetc ( stdin ); chars_read++; } 

Но что я могу сделать, если строка длиннее 80 символов? Очевидно, я мог бы просто инициализировать массив большим числом, но я уверен, что должен быть лучший способ дать массиву больше пространства с помощью malloc или что-то еще?

Любые подсказки были бы замечательными.

Найденный здесь где-то в сети давно, его действительно полезно:

 #include  #include  int main() { unsigned int len_max = 128; unsigned int current_size = 0; char *pStr = malloc(len_max); current_size = len_max; printf("\nEnter a very very very long String value:"); if(pStr != NULL) { int c = EOF; unsigned int i =0; //accept user input until hit enter or end of file while (( c = getchar() ) != '\n' && c != EOF) { pStr[i++]=(char)c; //if i reached maximize size then realloc size if(i == current_size) { current_size = i+len_max; pStr = realloc(pStr, current_size); } } pStr[i] = '\0'; printf("\nLong String value:%s \n\n",pStr); //free it free(pStr); pStr = NULL; } return 0; } 

Используйте realloc() чтобы выделить буфер и расширить его, когда он будет заполнен.