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好呀,最起码时间不会浪费在和字符串/宽窄字节/中文不支持等等奇怪又无聊的问题较劲上。
这东西就好像你想和妹子为爱鼓掌,然后裤带解不开,整半天兴致都没了。。。。。