第一题:
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,但其原现的内容已经被清除,新内容不可知。
第二题也是返回的指针,难道不怕发生这样的问题吗?还是我的理解有错误。
谢谢!!
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,但其原现的内容已经被清除,新内容不可知。
第二题也是返回的指针,难道不怕发生这样的问题吗?还是我的理解有错误。
谢谢!!
解决方案 »
- 网页中OCX控件子窗口无法响应键盘和鼠标消息
- 用ClassWizard生成类时出错
- 菜鸟问题:关于运行异常时定位错误方法的求证
- 在线等待:MFC SDI 视图切换问题
- 请问,各位高手,在哪里可以找到所用的.OCX控件
- 在InstallShield 6.22中如何设置使用程序在系统启动后自动运行
- 为什么我的程序设置小于64的SOCKET接收缓冲总是不成功?返回10014
- windows Api 串口通信,奇偶校验的问题?急
- 串口通信 overlapped read operation是什么意思?
- 谁有周公解梦?帮我解解这个梦!!100分给大家......
- MDI中怎么才能达到下面效果
- 高手,帮帮忙!谢谢
char p[] = "hello world";是局部变量,函数结束,将会被销毁,结果无法预计第二个
char *address = strDest;
返回的是外部变量的指针,当然没问题了。
char *address = strDest; 中address 是在这里是属于外部变量还是局部变量。搞糊度了。
在这里也应该是局部变量吧.
char *address这是一个局部变量的指针,但是内容是外部的strDest的地址我看你还是去好好看看书,理解一下指针的含义吧。
strDest是从形参中带进来的.
char *address这是一个局部变量的指针,但是内容是外部的strDest的地址第一个
char p[] = "hello world";是局部变量,函数结束,将会被销毁,结果无法预计address即然是局部变量,函数结束,不是没有效了吗?