一个简单c问题!(50分)

  • 主题发起人 主题发起人 jinmen
  • 开始时间 开始时间
J

jinmen

Unregistered / Unconfirmed
GUEST, unregistred user!
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
int main()
{
Test();
}
大家试验一下结果,想不通啊?
 
没有 C编译器,大概是指针问题吧
 
char p[] = "hello world";
替换为
char *p = "hello world";
 
c# :
// tryc.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream"

char *GetMemory(void)
{
char *p = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
//char p[] = "hello world";
str = GetMemory();
printf(str);
}
int _tmain(int argc, _TCHAR* argv[])
{
Test();
printf("hello, world !");
return 0;
}
我试了,可以!
 
你在GetMemory中定义的char p[]是一局部数组,函数执行完毕该数组被释放.
返回的P指针指向的内存区域是空闲区域,所以会有异常.
如果是改成 char* p = "hello world.";则返回的P指针是指向的一个静态字符串.
所以可以。
 
kazema说得对。建议看一下“C变量生存期”的有关文章
 
同意kazema, 另外可以使用静态变量:
char* GetMemory(void)
{
static char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = GetMemory();
printf(str);
}
 
接受答案了.
 
后退
顶部