俩段代码返回指针问题。

James_ht 2005-03-18 04:16:28
第一题:
char *GetMemory(void)
{ char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什幺样的结果?
答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。

第二题:
不调用C++/C的字符串库函数,请编写函数 strcpy
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ ) NULL ;
return address ;
}
我在看 高质量C++/C编程指南 有上面的二个题目.第一题和第二题都是返回一个指针.但是第一题中答案说:GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
第二题也是返回的指针,难道不怕发生这样的问题吗?还是我的理解有错误。
谢谢!!
...全文
75 点赞 收藏 11
写回复
11 条回复
ayanamiwww 2005年03月28日
楼上正解
回复 点赞
oyljerry 2005年03月27日
两个指针实际上都传递了,不过一个内存空间已销毁,一个没有销毁
回复 点赞
James_ht 2005年03月27日
明白了。address虽然局部变量。但是它指向外部strDest的地址.函数结束,虽然address变量销毁。但是它指的内存地址还没有销毁。
回复 点赞
xiao_xiao_zi 2005年03月27日
回楼上,但是它的值,也就是那个地址在address这个局部变量销毁前通过return传出去了
回复 点赞
James_ht 2005年03月27日
ayanamiwww(绫波):
char *address这是一个局部变量的指针,但是内容是外部的strDest的地址

第一个
char p[] = "hello world";是局部变量,函数结束,将会被销毁,结果无法预计



address即然是局部变量,函数结束,不是没有效了吗?
回复 点赞
dzq138 2005年03月23日
char *address = strDest;
strDest是从形参中带进来的.
回复 点赞
ayanamiwww 2005年03月23日
char *address = strDest;
char *address这是一个局部变量的指针,但是内容是外部的strDest的地址

我看你还是去好好看看书,理解一下指针的含义吧。
回复 点赞
James_ht 2005年03月21日
char *address
在这里也应该是局部变量吧.
回复 点赞
James_ht 2005年03月18日
你们好!
char *address = strDest; 中address 是在这里是属于外部变量还是局部变量。搞糊度了。
回复 点赞
ayanamiwww 2005年03月18日
楼上说的对

第一个
char p[] = "hello world";是局部变量,函数结束,将会被销毁,结果无法预计

第二个
char *address = strDest;
返回的是外部变量的指针,当然没问题了。
回复 点赞
oyljerry 2005年03月18日
address存放的是输入的地址,有效
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7889

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告