none
函数返回的问题 RRS feed

  • 问题

  • char *str_chang()

    {char str[20] = "hello word";strcpy(str,"hello word"); return str; }里面给str赋值有两种方法。

    void main(){char str11[20]; strcpy(str11,str_chang());}函数值赋给str.

    发现第一种用法直接赋值得到的str11是个非法值,而第二种方法可以得到hello word。哪位高手能指点下下菜鸟。为什么会出现这种情况呢。函数里str应该是存储在栈里面的,不论哪种方式,传递出去的是指针,那两种方式得到的都应该是非法的。为什么第二种却能得到值。哪个高手能详细点给我解释下,最好能全面点,让我了解更多。谢谢

    2012年1月4日 8:43

答案

  • 您的str_change函数返回的是栈上的,函数返回之后也就无效了,栈上的数据可能并没有即使被系统清除掉,所以可能得到正常的数据。但是一般编译器都会给一个警告~


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2012年1月4日 10:28
    版主

全部回复

  • 您的str_change函数返回的是栈上的,函数返回之后也就无效了,栈上的数据可能并没有即使被系统清除掉,所以可能得到正常的数据。但是一般编译器都会给一个警告~


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2012年1月4日 10:28
    版主
  • 我有一个疑问,一个很常用的用法

    int str_chang()

    {int str = 1; return str; }

    这个用法用了很多,常用,但是int str也是分配在栈上面的,传值后,也会释放。这种用法是否合法,和上面的有什么本质区别没。这种用法在大型程序中是否会出现异常情况呢,因为这种用法太普遍了。请导师教导

    2012年1月5日 2:44