您的位置:首页 > 其它

sprintf函数地址拷贝

2013-12-16 00:00 141 查看
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是没有问题的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: