读书人

请教小弟我这里为什么总有一个警告啊

发布时间: 2012-02-27 10:00:22 作者: rapoo

请问我这里为什么总有一个警告啊??
我这段程序哪里有问题?为什么总有一个警告?帮我看看啊
======================
char szString[256]={0};
char szBuff[1024]= {0};
strcpy(szString,str.c_str());
int iLen=strlen(szString);
for(int i=0; i <iLen ;i++)
{
sprintf(szBuff+i*2, "%02X ",szString[i]);
}
return szBuff;
=======================
提示最后一句有问题,
警告为:[C++ Warning] Unit1.cpp(29): W8075 Suspicious pointer conversion
郁闷 ,要是把最后一句改成:
char *a;
a=szBuff;
return a;就没有问题了,为什么呢??

[解决办法]
sprintf里的第一个参数,楼主是想干吗呢?
sprintf是以一定格式将参数2和3的内容复制到参数1的缓冲区中
而你是szBuff+i*2到底是想干吗呢?是想逐个字符复制???
只要这样用就OK了,sprintf(szBuff, "%02x ",szString);
如果是逐个字符复制的话这个用法就是错误的。。。
[解决办法]
你的程序是不正确的,返回的szBuff指针是个野指针。在你函数返回的时候,你的szBuff空间已经被释放了。就算你用你说的方法将警告去掉了,还是错误的。

我不清楚你为什么要返回空间的指针,如果真的要返回的话,请用new在堆上创建一个空间。
[解决办法]
局部指针是不能返回的,建议将函数的原形改称char* test(char * givePoint)传入givePoint然后再将givePoint返回,这样是最好的!

读书人网 >C++ Builder

热点推荐