Как считать неограниченные символы в C

Как считать неограниченные символы в a char* переменная, не указывая размер?

Например, скажите, что я хочу считать адрес сотрудника, который может также проводить несколько строк.

5
задан Lorenzo Donati supports Monica 3 October 2013 в 19:01
поделиться

2 ответа

Вы должны начать с «угадывать» ожидаемый размер, а затем выделить буфер, который 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++;
}

Это просто не у меня в голове и может (читай: вероятно) содержать ошибки, но должно дать вам хорошее представление.

8
ответ дан 14 December 2019 в 01:05
поделиться

Как насчет того, чтобы просто поместить в стек буфер размером 1 КБ (или 4 КБ), читать в него, пока не найдете конец адреса, а затем выделить буфер правильного размера и скопировать в него данные? Как только вы вернетесь из функции, буфер стека исчезнет, ​​и у вас будет только один вызов malloc .

0
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: