当前位置: 代码迷 >> C语言 >> [求助]一个看似没错却出错的程序
  详细解决方案

[求助]一个看似没错却出错的程序

热度:122   发布时间:2007-01-09 13:42:45.0
[求助]一个看似没错却出错的程序
#include<stdio.h>
#include<string.h>
char *str = NULL;
void hello()
{
char p[20] = "helloworld";
str = p;
}
void main()
{
hello();
printf("%s",str);
}
编译没问题
但结果却是乱码,为什么?大家指点一下,谢谢
搜索更多相关的解决方案: str  void  hello  char  

----------------解决方案--------------------------------------------------------
你还真会为自己找借口呀!
你看看行不?
#include<stdio.h>
#include<string.h>
//char *str = NULL;
void hello()
{
char *str;
char p[20] = "helloworld";
str = p;
printf("%s",str);
printf("\n");
}
void main()
{
hello();

}

----------------解决方案--------------------------------------------------------
难道它多线程.
----------------解决方案--------------------------------------------------------

在函数 hello()中 指针str指向 p[]
当调用完函数时候 释放了p[]里的内容
所有str就成野指针了


----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<string.h>
char *str = NULL;
void hello()
{
char p[40] = "helloworld";
str = p;
}
void main()
{
hello();
printf("%s",str);
}
这样改输出正确
----------------解决方案--------------------------------------------------------
这个问题我也没看懂........我只是乱搞
----------------解决方案--------------------------------------------------------
可能是我的编辑器又有问题了

----------------解决方案--------------------------------------------------------
6楼的兄弟,你的程序我用VC6.0运行后输出的是个“.”,不知你那运行得怎么样


终于顿悟,原来4楼的解释正是我想要知道的,虽然str是全局变量,但是hello()执行完后,虽然str的值是p的值,但是p所指向的字符串已经没了,所以虽然str还有值,但是所指向的东西视系统而定了

谢谢大家
----------------解决方案--------------------------------------------------------
以下是引用sunhj027在2007-1-9 14:00:07的发言:

在函数 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";
还能不能得结果?


----------------解决方案--------------------------------------------------------
而当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);
}
可以得到结果,
呵呵,这个我是没有得到正确的结果!
----------------解决方案--------------------------------------------------------
  相关解决方案