第一题:
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,但其原现的内容已经被清除,新内容不可知。
第二题也是返回的指针,难道不怕发生这样的问题吗?还是我的理解有错误。
谢谢!!

解决方案 »

  1.   

    address存放的是输入的地址,有效
      

  2.   

    楼上说的对第一个
    char p[] = "hello world";是局部变量,函数结束,将会被销毁,结果无法预计第二个
    char *address = strDest; 
    返回的是外部变量的指针,当然没问题了。
      

  3.   

    你们好!
    char *address = strDest; 中address 是在这里是属于外部变量还是局部变量。搞糊度了。
      

  4.   

    char *address
    在这里也应该是局部变量吧.
      

  5.   

    char *address = strDest;
    char *address这是一个局部变量的指针,但是内容是外部的strDest的地址我看你还是去好好看看书,理解一下指针的含义吧。
      

  6.   

    char *address = strDest;
    strDest是从形参中带进来的.
      

  7.   

    ayanamiwww(绫波):
    char *address这是一个局部变量的指针,但是内容是外部的strDest的地址第一个
    char p[] = "hello world";是局部变量,函数结束,将会被销毁,结果无法预计address即然是局部变量,函数结束,不是没有效了吗?
      

  8.   

    回楼上,但是它的值,也就是那个地址在address这个局部变量销毁前通过return传出去了
      

  9.   

    明白了。address虽然局部变量。但是它指向外部strDest的地址.函数结束,虽然address变量销毁。但是它指的内存地址还没有销毁。