一个关于C++的实习题
来源:百度知道 编辑:UC知道 时间:2024/04/28 22:17:47
请各位看看结果为什么不对啊?
#include<stdio.h>
char* GetMemory(void)
{
char p[] = "Welcome to AMOI";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
#include<stdio.h>
char* GetMemory(void)
{
char p[] = "Welcome to AMOI";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
这个玄妙了~~~~~
两个问题:
1. 进行字符串输出时的printf语句,你写的不对,
printf(str);
改成:
printf("%s",str);
2. 即使按照上面改了,还是不对,因为,你的程序中,str指向的是GetMemory()中的变量p对应的地址,但是对于p来说,它是GetMemory()中的一个变量,
所以在GetMemory()执行完毕后,p也就被释放了,所以实际上str指向的是一个野地址,所以输出还是有错误。
综上,
这么改:
#include<stdio.h>
char p[] = "Welcome to AMOI"; //将p变为全局量,就没有作用域的问题了
char* GetMemory(void)
{
//char p[] = "Welcome to AMOI";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
//printf(str);
printf("%s",str);
}
把 char p[] 改成 char * p
我改了一下 改动之后 应该是按照常字符串存储 而不是字符数组
在显示上就不会出错了 否则 中间有空格
可能是乱码
你返回了一个临时指针
一定有问题,得仔细找找