char* teststr() { char s[] = "hello"; return s; } void main() { char* str = teststr(); char c1 = str[0]; //h char c2 = str[1]; //e char c3 = str[2]; //l char c4 = str[3]; //l char c5 = str[4]; //o char c6 = str[5]; // char* s2 = str; printf(str); }
根据理论:s是栈上数组,是个局部变量,出了函数后将变得无效,如上程序,printf(str)是乱码,验证了理论。
同样,在单步调试状态下查看str的值也是乱码。
但,若去掉 printf(str)这一行,则在单步调试下查看str和s2的值都是正确的结果, 这很奇怪
PS,字符串常量与变量
char* teststr() { char s[] = "hello"; //字符串变量 return s; } char* teststr2() { char* s = "hello"; //字符串常量 return s; }