一个关于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);
}

这个玄妙了~~~~~

两个问题:
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

我改了一下 改动之后 应该是按照常字符串存储 而不是字符数组

在显示上就不会出错了 否则 中间有空格

可能是乱码
你返回了一个临时指针

一定有问题,得仔细找找