如何在C中读取无限字符

Pri*_*Raj 5 c input realloc dynamic-memory-allocation

如何在char*不指定大小的情况下将无限字符读入变量?

例如,假设我想要读取也可能需要多行的员工的地址.

Dea*_*ing 8

你必须首先"猜测"你期望的大小,然后分配一个大的缓冲区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++;
}
Run Code Online (Sandbox Code Playgroud)

这只是我的头脑,可能(读:可能会)包含错误,但应该给你一个好主意.