Если я правильно понимаю вашу проблему, вам нужно прочитать пользовательский ввод какого-то неизвестного размера, таким образом, сохранить эту информацию в массиве символов, верно? Если это так, одним из возможных решений было бы иметь массив символов, с которым должен быть назначен фиксированный размер по умолчанию, это динамически перераспределяет его размер на лету.
После зацикливания символов ввода и проверки того, что вы не нажали EOF, вы должны добавить символ в массив. Хитрость заключается в том, чтобы проверить, достаточно ли массив массив для хранения символов из пользовательского ввода. Если нет, вы должны перераспределить размер массива.
Пример реализации решения может выглядеть примерно так:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int len_max = 128;
unsigned int current_size = 0;
char *input = malloc(len_max);
current_size = len_max;
printf("\nEnter input:");
if(input != NULL) {
int c = EOF;
unsigned int i = 0;
// Accept user input until hit EOF.
while (( c = getchar() ) != EOF) {
input[i++] = (char)c;
// If reached maximize size, realloc size.
if (i == current_size) {
current_size = i + len_max;
input = realloc(input, current_size);
}
}
// Terminate the char array.
input[i] = '\0';
printf("\nLong String value:%s \n\n",input);
// Free the char array pointer.
free(input);
}
return 0;
}
С точки зрения производительности, я не уверен, что это может быть лучшим решением, но я надеюсь, что это может помочь вам в решении вашей проблемы.
С уважением
~ E.