#include <stdio.h>
#include <stdlib.h>
#include <string.h> // memset

int main()
{
    // 定义字符数组，接收用户输入的内容（最大值为 100 B）
    char *p = (char *)malloc(100 * sizeof(char));

    if (NULL == p)
    {
        perror("malloc");
        return 1;
    }
    memset(p, 0, 100 * sizeof(char));
    printf("data: ");
    scanf("%s", p);

    // strlen() 获取字符的个数
    int len = 0;
    while (p[len++])
        ; // len = strlen(p);

    if (len != 100)
    {
        printf("before realloc,%p\n", p);
        // 重新分配空间
        p = (char *)realloc(p, (len) * sizeof(char));
        printf("after realloc,%p\n", p);
    }

    printf("%s, size of p: %d\n", p, len); // 重新分配空间后，p 的大小不变
    free(p);                               // 释放空间

    return 0;
}