C++返回栈上的数组(局部变量)问题探索
2024-08-31 14:28:13
char* teststr() {
char s[] = "hello";
return s;
} void main()
{
char* str = teststr();
char c1 = str[]; //h
char c2 = str[]; //e
char c3 = str[]; //l
char c4 = str[]; //l
char c5 = str[]; //o
char c6 = str[]; //\0 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;
}
最新文章
- 设计模式--单例模式Singleton(创建型)
- 解决eclipse+MAVEN提示One or more constraints have not been satisfied.的问题
- codeforces A. Table 解题报告
- Android-Adapter用法总结
- Android之 学习路线
- (转)iOS学习之 plist文件的读写
- java中打开说明文档
- 用C实现一个简单的对拍器——致每个曾经为求AC披星戴月的程序员们
- 点集配对问题(状态dp)
- springMVC+Mybatis(使用AbstractRoutingDataSource实现多数据源切换时)事务管理未生效的解决办法
- 2_http协议详解
- Laravel ORM 数据model操作
- clear命令新认识
- 跟我一起学opencv 第二课之图像的掩膜操作
- python的pyspider框架下爬虫
- iis配置问题
- JSP内置对象page/pageContext/Config/Exception
- Azure Redis 缓存使用注意事项与排查问题文档整理
- Java 8 lambda表达式示例
- Javascript库的产生和解读