sprintf函数地址拷贝

                       case 'd': //delete
                                ret = parse_get_username(path, &user_name);
                                ret_v = parse_get_validity(path, &uid_validity);
                                if(ret == TRUE){
                                        if(ret_v == TRUE){
                                                sprintf(sync_buf, "%s %s %s %s .%s\n", ttime, user_name, cmd, uid_validity, objectname);
                                                free(uid_validity);
                                        }else{
                                                sprintf(sync_buf, "%s %s %s .%s\n", ttime, user_name, cmd, objectname);
                                        }

                                        ret = write(sync_fd, sync_buf, strlen(sync_buf));
                                        if(ret <= 0){
                                                sync_buf[strlen(sync_buf)-1] = '\0';
                                                i_error("### sync_opmail.log write error! [cmd:delete args:%s]###",sync_buf);
                                        }
                                        free(user_name);
                                }
                                break;

这段函数中加粗部分:
开辟地址返回数据后sprintf格式化输出到变量sync_buf中就free掉uid_validity这个变量了,这没有影响后面的write对这段数据的操作。可以直接打印出sync_log的首位地址和uid_validity变量的地址,这两个地址是不相关的,也就是说:sprintf是一个拷贝过程。所以free是没有问题的。

转载于:https://my.oschina.net/Jesuslovesyou/blog/184939

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值