#include <stdio.h>
#include <stdlib.h>

int main() {
    int capacity = 10;  // 初始缓冲区容量
    int len = 0;        // 当前字符串长度
    char *s = (char *)malloc(capacity * sizeof(char)); // 分配初始内存
    
    if (s == NULL) {
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }

    int c;
    // 逐个字符读取输入,直到换行符或EOF
    while ((c = getchar()) != '\n' && c != EOF) {
        // 检查是否需要扩展内存
        if (len + 1 >= capacity) {
            capacity *= 2; // 双倍扩容
            char *temp = (char *)realloc(s, capacity * sizeof(char));
            if (temp == NULL) {
                fprintf(stderr, "内存分配失败\n");
                free(s);
                return 1;
            }
            s = temp;
        }
        s[len++] = (char)c; // 存储字符并增加长度
    }
    s[len] = '\0'; // 添加字符串终止符

    printf("%s", s); // 输出字符串
    free(s);        // 释放分配的内存
    return 0;
}