我有以下代码.
#include <iostream>
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
std::cout << *p;
*p = 8;
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
而代码只是运行而没有运行时异常!
输出是 58
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
给一个字符串,比方说,
char *str = "Hello,StackOverflow!"
char newStr[30];
int l = strlen(str);
for(int i =0 ; i<l ; i ++ )
newStr[i] = str[i];
printf("%s" , newStr);
Run Code Online (Sandbox Code Playgroud)
现在,我们知道c字符串的最后一个字符必须是'\0',因为在这里我们没有明确地做同样的事情(在字符串newStr的最后一个索引处存储'\ 0'),这个程序应该崩溃,因为printf不会找到字符串的结尾.
但是我注意到它有时很好用,有时它不是.可能是什么问题呢 ?它几乎每次都在工作.是不应该崩溃或给出一些运行时错误?
在C++中它也是同样的情况吗?