总觉得这个问题有点简单,不过确实有点不解,请大家帮帮我
这样一个函数:
char *getstr()
{
char str[200];
strcpy(str,"最近有点烦");
return str;}VC编译时总会警告我说:“returning address of local variable or temporary”
请问,函数一般是如何返回字符串的呢?
这样一个函数:
char *getstr()
{
char str[200];
strcpy(str,"最近有点烦");
return str;}VC编译时总会警告我说:“returning address of local variable or temporary”
请问,函数一般是如何返回字符串的呢?
char *getstr()
{
CString str;
str="最近有点烦";
return str;}
char str[200];char *getstr()
{
strcpy(str,"最近有点烦");
return str;}
因为 char str[200]; 在函数中的生存期,到函数结束时便被内存释放,也就是说,你返回的值是指向一块被释放了的内存区,这块内存一旦被使用,你调用指针时肯定出错。改为代参数的函数就可以了。 int getstr(char *name);
ZeroMemory(str,100);
getstr(str);
cout<<str<<endl;
BOOL *getstr(char *s)
{
strcpy(s,"最近有点烦");
return TRUE;
}
最好把函数改为
void getstr(char *str)
str缓冲区由调用者申请
{
CString str;
str="最近有点烦";
return str;
}
BOOL getstr(char *s)
{
strcpy(s,"最近有点烦");
return TRUE;
}
就在堆上分配了!
char *getstr()
{
char * str = new char[200];
strcpy(str,"最近有点烦");
return str;
}
// 这个函数的调用者负责释放返回的内存
{
strcpy(start,"最近比较烦");
return start;
}
void getString(CString& retString)
{
retString="最近有点烦";}
上面兄弟的例子可能是最直接的,但如果一定要使用char*,则可以这样
定义:void getstr(char& str);
实现:void getstr(char& str)
{
str = new char[200];
strcpy(str,"最近有点烦");
}
使用:
……
char mystr;
getstr(mystr);
printf("mystr = %s\n", mystr);
……
output
mystr = 最近有点烦
在函数内new
传递给外层使用
谁该为这个指针或引用的销毁负责