Как считать неограниченные символы в a char*
переменная, не указывая размер?
Например, скажите, что я хочу считать адрес сотрудника, который может также проводить несколько строк.
Вы должны начать с «угадывать» ожидаемый размер, а затем выделить буфер, который big с использованием malloc
. Если это окажется слишком маленьким, вы используете realloc
, чтобы изменить размер буфера, чтобы он был немного больше. Пример кода:
char *buffer;
size_t num_read;
size_t buffer_size;
buffer_size = 100;
buffer = malloc(buffer_size);
num_read = 0;
while (!finished_reading()) {
char c = getchar();
if (num_read >= buffer_size) {
char *new_buffer;
buffer_size *= 2; // try a buffer that's twice as big as before
new_buffer = realloc(buffer, buffer_size);
if (new_buffer == NULL) {
free(buffer);
/* Abort - out of memory */
}
buffer = new_buffer;
}
buffer[num_read] = c;
num_read++;
}
Это просто не у меня в голове и может (читай: вероятно) содержать ошибки, но должно дать вам хорошее представление.
Как насчет того, чтобы просто поместить в стек буфер размером 1 КБ (или 4 КБ), читать в него, пока не найдете конец адреса, а затем выделить буфер правильного размера и скопировать в него данные? Как только вы вернетесь из функции, буфер стека исчезнет, и у вас будет только один вызов malloc
.