首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

华为比试的一道题解决办法

2012-02-07 
华为比试的一道题很简单的题目char*func(void){char*str ABC returnstr}voidTest(){char*pNULLpfu

华为比试的一道题
很简单的题目
char   *func(void)
{
    char   *str= "ABC ";
    return   str;
}

void   Test()
{
    char   *p=NULL;
    p=func();
    print(p);
}

问:运行Test函数后的输出是什么?

输出应该是ABC,但是这样做有什么危害呢?


[解决办法]
危害嘛,首先字符串常量“ABC "保存在程序静态存储区,整个程序运行过程中都存在,浪费空间,这里不明显.

另一个是,你返回的是一个指向 常量的指针,但是语法层没有限制,也就是通过p修改字符串内容这样的动作 编译可以通过,但是明显程序会down掉
[解决办法]
很简单的题目
char *func(void)
{ char *str= "ABC ";
return str;}
void Test()
{ char *p=NULL;
p=func();
print(p);}
问:运行Test函数后的输出是什么?输出应该是ABC,但是这样做有什么危害呢?
----------------------------------
错用指针,Test函数后的输出的结果不一定是ABC!!
 其实危害到没有什么,因为你在 print(p);时p保存的地址已经标记为不使用。
 对于读取非法内存算是危害。非法写显然是危害。
一个同样的例子:http://community.csdn.net/Expert/topic/5378/5378928.xml?temp=5.083865E-02
//错用指针,函数的值传递和引用传递,引用传递就是
//直接修改参数变量内容,楼主把指针用反了,指针指向的变量应该在main函数等
//调用的函数中,而楼主却把分配变量放到被调函数中,等函数返回后你的p;
//得到了地址没错,可是因为被调函数一经返回,所有分配的变量就被释放。内容是不是
//会被改变很难说,即时你上面的程序正确运行、结果正确,这种设计也是错误的。
//应该把变量定义在主调函数中,然后用指针作参数。

热点排行