能力值:
(RANK:410 )
|
-
-
2 楼
当然会空了,函数的局部变量在函数返回后就会被释放。你如果要在函数里返回字符串函数必须带有一个输出缓冲参数变量,或者你在函数内部申请内存才行。不过,在函数内部申请内存的做法不太好管理和维护,你的程序必须在调用该函数后不用这个内存时必须释放他,最好的方法就是函数带输出缓冲的参数变量。如:
char* WINAPI dectohex (int num,char* OutChar)
{
sprintf(OutChar,"%x",num);
return OutChar;
}
|
能力值:
(RANK:410 )
|
-
-
3 楼
最好还要加上一个Out缓冲区大小参数,以免函数内部不知道传入的缓冲区大小而引发可能溢出缓冲区的操作。
char* WINAPI dectohex (int num,char* OutChar,int OutBuffSize)
{
sprintf(OutChar,"%x",num);
return OutChar;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢我们热心的小虾班班...您真是太好了
代码备用.:学习记录
char* WINAPI dectohex (int num,char *temp=NULL)
{
temp=new char[50];
sprintf(temp,"%x",num);
return temp;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
char* WINAPI dectohex (int num,char *temp=NULL) { temp=new char[50]; sprintf(temp,"%x",num); return temp; }
在VB中调用的时候小心有内存泄漏哦~~记得再导出一个用来释放缓冲区的函数。
或者,牺牲线程安全:
char* WINAPI dectohex (int num,char *temp=NULL) { static char temp[50]; sprintf(temp,"%x",num); return temp; }
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
请大侠赐教,有点迷糊~
delete temp ?????
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
楼主去看看内存分配方式就知道原因了。
函数内的局部变量是在栈上创建的,函数返回时自动被释放;
动态创建的内存是在堆上分配的,但是new之后,要记得free,不然会出现内存泄漏
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
严重的学习了....
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
|
|
|