首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时检查失败#2 -变量‘z’周围的堆栈已损坏。

运行时检查失败#2 -变量‘z’周围的堆栈已损坏。
EN

Stack Overflow用户
提问于 2014-03-28 11:38:23
回答 2查看 929关注 0票数 0

我有这样的代码:

char z9;Int_To_BCD(vInt,z);Buflen += sprintf(BufStr + Buflen,"(%s)",z);

和:

void Int_To_BCD (int val,char *out) { int i= 0;int j= 0;int outIndex = 0;无符号字符digits4;无符号char Digit2;memcpy((void*)位数,(void*)&val,4);for (i = 0;i <= 3;i++) {位数=(数字化与高)/ 16;Digit1 =数字与低;对于(j = 0;j< 2;j++) { sprintf(&(outoutIndex),"%d",Digitj);outIndex++;}}如果(outIndex == 0) { sprintf(&( outoutIndex ),"%d",0);outIndex++;}outoutIndex= '\0';}

在调试模式下:程序运行到主函数的末尾,并显示消息:

运行时检查失败#2 -变量'z‘周围的堆栈已损坏。

outIndex的最大值总是8。Z有8个字节的内存。不是吗?

有什么问题吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-28 11:52:47

在这里,您似乎取了字节的上、下半部分。

代码语言:javascript
复制
Digit[0] = (digits[i] & HIGH) / 16;
Digit[1] = digits[i] & LOW;

这些是十六进制数字:从0到15不等。

这意味着,如果最后一个数字大于9,sprintf%d将打印3个字符(2位数和\0),并且会出现缓冲区溢出。

票数 2
EN

Stack Overflow用户

发布于 2014-03-28 11:41:45

中使用%c而不是%d

代码语言:javascript
复制
sprintf(&(out[outIndex]), "%d", Digit[j]);

工作顺利吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22711805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档