首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

返回字符串指针的有关问题

2012-04-03 
返回字符串指针的问题代码char*f(){charbuffer[100]strcpy(buffer,经过处理得到的字符串内容);returnbuff

返回字符串指针的问题
代码
char   *   f()
{
char   buffer[100];
strcpy(buffer,经过处理得到的字符串内容);
return   buffer;
}

因为buffer是局部变量,所以返回后的数据是不安全的,但我的功能一定要返回,所以我想问一下,有什么办法。
我用的时候并不是直接赋值,而是调用strcpy(str,f());这样有问题吗?

[解决办法]
static char buffer[100];

话说回来, 既然是C++, 干嘛不用string呢?

[解决办法]
考虑过动态分配,但是会内存泄露
-------------------------------
记得delete就行
[解决办法]
将char buffer[100]放在函数外面,然后用f(char * p)不是更好些吗?
[解决办法]
对,作为参数传递不错
[解决办法]
使用指向指针的指针作为参数把
void char f(char **p)
{
*p = char buffer[100];
strcpy(*p,经过处理得到的字符串内容);
}

[解决办法]
那我要每次返回函数之后用delete,这样显然很麻烦,并且会忘掉的
-------
这也嫌麻烦?
很多都需要自己考虑的,何况debug就是干这种事情的
[解决办法]
不要返回指向栈内存的引用或指针
[解决办法]
char* f()
{
static char buffer[100];
strcpy(buffer, "经过处理得到的字符串内容 ");
return buffer;
}
[解决办法]
在堆上分配内存就可以了
[解决办法]
怎么可能安全?

返回的是一个临时变量。。。
[解决办法]
出了函数就把变量收回了...你能得到什么?
[解决办法]
考虑到了多次调用f()的情况, 如:
printf( "%s, %s, %s ", f(), f(), f());

至少可以一次调10次

#define BUFFERS10
char * f()
{
static char buf[BUFFERS][100];
static short which;

which = (which + 1 == BUFFERS ? 0 : which + 1);

strcpy(buffer,经过处理得到的字符串内容);
return buf[which];
}
[解决办法]
你函数中声名的变量,当函数返回时变量被释放了,你可以在函数外声明变量:
char buffer[100];
char * f(buff)
{

strcpy(buffer,经过处理得到的字符串内容);
return buffer;
}
这样应该没有问题了.


[解决办法]
有几种方法:
1、使用string:
string f() {
...
return string(...);
}
2、使用智能指针:
auto_ptr <char> f() { //boost::shared_ptr也可以
auto_ptr <char> r(new char[100]);
...
return r;
}
3、通过参数复制:
int f(char* b) { //这是C API常用的手法
if(b==0) //调用者通过f(0)获取所需缓冲区长度
return 需要的缓冲区长度;

return strcpy(b, ...);
}

热点排行