[求助]一个看似没错却出错的程序
#include<stdio.h>#include<string.h>
char *str = NULL;
void hello()
{
char p[20] = "helloworld";
str = p;
}
void main()
{
hello();
printf("%s",str);
}
编译没问题
但结果却是乱码,为什么?大家指点一下,谢谢
在函数 hello()中 指针str指向 p[]
当调用完函数时候 释放了p[]里的内容
所有str就成野指针了
其实,p所指的空间没有什么释放的过程,
只是把指针和这个动态空间断开连接,就相当于把这个空间释放了。
这个空间的内容还是存在的,
当写入新的数据时,这个空间会被新的数据所取代。
而当5楼的程序为p所加的空间多的时侯,“helloworld”的空间还没被覆盖,
所以
#include<stdio.h>
#include<string.h>
char *str = NULL;
void hello()
{
char p[40] = "helloworld";
str = p;
}
void main()
{
hello();
printf("%s",str);
}
可以得到结果,
但如果,把char p[40] = "helloworld"; 改为
char p[40] = "helloworldhelloworldhelloworld";
还能不能得结果?