动态分配内存补充 realloc

当再次在原来申请的内存基础上再加内存的时候用realloc,如果第一次分配的内存后面存储地方够用,则连着原来的申请,如果不够用,就重新找到一块够用的地方,然后把原来的复制过去

int main(int argc, const char * argv[]) {

    char *name = NULL;

    int total = 0;

    while(1){

        char a = getchar();

        if (a == '\n'){

            break;

        }

        if (name ==NULL) {

            name = (char*)malloc(1*sizeof(char));   //第一次进入的时候是用malloc分配空间

            if (name ==NULL) {

                exit(EXIT_FAILURE);

            }

        }else{

            char * temp=NULL;

            temp = (char *)realloc(name, (total+1)*sizeof(char));   //再次进入的时候使用realloc分配空间

            if (temp ==NULL) {

                free(name);   //如果第二次之后申请内存失败,要释放掉之前申请的内存,所以先用temp来申请,如果没申请成功,释放掉原来的name。

                exit(EXIT_FAILURE);

            }

            name =temp;

        }       

        *(name +total) = a;  // 依次存放进去

        total++;

    }

    printf("%s\n",name);

    free(name);

    return 0;

}

转载于:https://www.cnblogs.com/huoran1120/p/5047376.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值