打印

一个C语言易犯的低级错误

[复制链接]
2075|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hebeijiang|  楼主 | 2010-4-28 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天在调试程序时发现个问题:
printf(DouToStr(-20.01))   //可以输出字符:-20.01
KeyInit("-20.01", -100, 2000, DispId, "%s")    //可以正常工作,
但:
KeyInit(DouToStr(-20.01), -100, 2000, DispId, "%s")    //工作异常,表现为-20.01没带入KeyInit函数。
仔细看后发现是DouToStr函数错误:
S8 *DouToStr(double Dou)
{
    S8 Str[StrMax+3];    //问题就出在这。
    ....
    return Str;
}
Str数组是在函数DouToStr被调用时在栈中建立的,在DouToStr返回时已经被回收,就是说在DouToStr返回后Str理论上已经不存在了,随时会被改写。
但在没有别的程序改变栈的内容时,Str依旧可以读到正确的值。所以才有printf输出正确。
在KeyInit调用时,因参数传递的较多,已经覆盖了原Str的部分内容,导致工作异常。

相关帖子

沙发
ayb_ice| | 2010-4-28 16:40 | 只看该作者
这不是低级情况
这是对C局部变量理解不透彻

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

158

帖子

1

粉丝