关于C++函数返回字符串char*的问题

比如

 char* fun()
 {
     char s1[10];
     char *s2=new char[10];
     //return s1;                报错,不能返回局部变量
     return s2;
 }
 int main(int argc,char** argv)
 {
     char* s=fun();
     delete[] s;                      //是否有必要??如果是返回const char*呢??
 }

因为涉及到内存管理,实在太烦了

//报错,不能返回局部变量 说明你的编译器比较智能或者版本叫新。在编译阶段就已经检查出了错误。
char s1[10]; 在函数内部定义局部变量从内存四区的角度来讲,其属于栈区。当你调用这个函数时候, 操作系统为char s1[10]; 在栈区分配空间,
然而函数调用结束后,操作系统会收回栈区。return s1,是一个已经被释放了空间内存地址。一般在编译没有报错,则执行的时候肯定会出错。
char *s2=new char[10]; 是你自己动态申请的内存,其是在堆区。函数调用完后,操作系统不会主动释放其空间。所以可以返回其首地址。正因为
操作系统不主动回收其内存,因此需要你主动释放。要想写好这样一类程序,一定要理解内存四区概念。

S1 是静态的地址,不是局部变量的原因。s2 也是局部变量!
一般不做做函数内分配,外面释放的设计。但就你的代码,是必须要释放的。

当然有必要,否则会造成内存泄漏。
一般来说主程序分配和回收,而子程序不管。
这样配对写不容易出错。

需要释放,否则就内存泄露了。
所以这种设计就不是很好。c++中讲究RAII
你需要定义分配,释放对应的一组接口。所以你的例子就要再定义一个释放函数给main调用。

只要是你的代码分配的就应该有你的代码释放。不同类型的指针只是限制了的你的操作行为。

当然有必要,否则会造成内存泄漏。

函数不能返回局部变量的地址,因为局部变量返回意味着其生命周期结束,再去释放又有何意义呢

是因为你返回的是指针,指针实际上是要存地址,而你这是局部变量,党局部变量的声明周期结束,地址也就没了,所以包错