int main(){
char *s ;
char *fun( ) ;
s = fun( ) ;
printf ( "%s", s ) ;
}
char *fun( ){
char buffer[30] ;
strcpy ( buffer, "RAM - Rarely Adequate Memory") ;
return ( buffer ) ;
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的代码打印出不可预测的结果?如何使char buffer [30]静态帮助?
static对于程序的整个运行时,存在一个变量,与普通的"自动"变量不同,该变量仅在其父作用域存在时才存在.
如果确实返回了指向非static变量的指针,则表示调用者获取对内存的引用,当被调用函数返回时,该引用不再保留它在函数内所执行的操作.调用者无法有效访问该内存,这样做会调用未定义的行为.