总觉得这个问题有点简单,不过确实有点不解,请大家帮帮我
这样一个函数:
char *getstr()
{
char str[200];
strcpy(str,"最近有点烦");
return str;}VC编译时总会警告我说:“returning address of local variable or temporary”
请问,函数一般是如何返回字符串的呢?

解决方案 »

  1.   

    当然了,str[]数组的空间在这个函数执行完后就释放了。
      

  2.   

    改为:
    char *getstr()
    {
    CString str;
    str="最近有点烦";
    return str;}
      

  3.   

    还可以这样:
    char str[200];char *getstr()
    {
             strcpy(str,"最近有点烦");
    return str;}
      

  4.   

    这是种错误的返回法。
    因为 char str[200]; 在函数中的生存期,到函数结束时便被内存释放,也就是说,你返回的值是指向一块被释放了的内存区,这块内存一旦被使用,你调用指针时肯定出错。改为代参数的函数就可以了。 int getstr(char *name);
      

  5.   

    char str[100];
    ZeroMemory(str,100);
    getstr(str);
    cout<<str<<endl;
    BOOL *getstr(char *s)
    {
       strcpy(s,"最近有点烦");
       return TRUE;
    }
      

  6.   

    你不能把str传回去,因为getstr返回以后,指针str就不能使用了,要注意变量的生存期.
    最好把函数改为
    void getstr(char *str)
    str缓冲区由调用者申请
      

  7.   

    CString getstr()
    {
    CString str;
    str="最近有点烦";
    return str;
    }
      

  8.   

    应该是
    BOOL getstr(char *s)
    {
       strcpy(s,"最近有点烦");
       return TRUE;
    }
      

  9.   

    定义成LPTSTR,与一般的char *有什么区别呢?
      

  10.   

    char *str = new char[200];
    就在堆上分配了!
      

  11.   

    原因楼上说得很清楚了这样该可以:
    char *getstr()
    {
    char * str = new char[200];
    strcpy(str,"最近有点烦");
    return str;
    }
    // 这个函数的调用者负责释放返回的内存
      

  12.   

    char *getstr(char* start)
    {
    strcpy(start,"最近比较烦");
    return start;
    }
      

  13.   

    用引用最好
    void getString(CString& retString)
    {
        retString="最近有点烦";}
      

  14.   

    偶也认为用引用是最好的
    上面兄弟的例子可能是最直接的,但如果一定要使用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 = 最近有点烦
      

  15.   

    我不服
    在函数内new
    传递给外层使用
    谁该为这个指针或引用的销毁负责