请尽量在编程时避免函数返回值为char*

char*很好用,不过呢它是一个指针,指针就有指针都有的问题,例如野指针,又或者是空指针。

在char*作为函数返回值时,可能会造成某些不可预知的后果,比如你的返回值时而有时而没有之类的。

举个栗子

//这是一个函数,目的是返回一个char*数组作为文件的路径
char* returnFilePath(char* fatherFilePath,char*sonFilePath)
{
    char * tempPath = (char*)malloc((sizeof(char))(sizeof(fatherFilePath) + sizeof(sonFilePath)));

    strcpy(tempPath ,fatherFilePath);
    strcat(tempPath ,sonFilePath);

    return tempPath ;

}

看上去很合理嘛,就是把传进来的两个char*拼接成一个新的再返回嘛

不过这样写会有问题:

1.tempPath 是一个临时变量,它的生命周期在函数结束时就已经GG思密达了,但是呢,它返回的那个指针理论上当前还是指向正确的结果的(那块内存/整个程序的内存没被动过的前提下),如果这时候需要对内存进行操作,操作之后想要的结果就不知道哪里去了,静静地躺在内存区。

2.每次都划分空间,无法释放,直接释放返回值其实是无效的,释放一个已经生命周期结束的指针没啥意思。内存会泄漏,虽然这个文件路径看上去每次都不算大,不过内存泄漏可算是大事故哦。。

 

推荐玩法

//这是一个函数,目的是得到文件的路径
void returnFilePath(char* fatherFilePath,char*sonFilePath, char[] & result)

具体语法可能会有点问题,但大致意思就是预先定义好承载你的文件路径的数组地址,实参地址修改实参,这样就爽了呀

传入一个char[MAX_FILEPATH]多香。

 

人生苦短,还是选python好呀,最起码时间不会浪费在和字符串/宽窄字节/中文不支持等等奇怪又无聊的问题较劲上。

这东西就好像你想和妹子为爱鼓掌,然后裤带解不开,整半天兴致都没了。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值