繁体   English   中英

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

[英]Run-Time Check Failure #2 - Stack around the variable ''z" was corrupted

我有以下代码:

 char z[9]; 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; unsigned char digits[4]; unsigned char Digit[2]; memcpy((void*)digits, (void*)&val, 4); for (i = 0; i <= 3; i++) { Digit[0] = (digits[i] & HIGH) / 16; Digit[1] = digits[i] & LOW; for (j = 0; j < 2; j++) { sprintf(&(out[outIndex]), "%d", Digit[j]); outIndex++; } } if (outIndex == 0) { sprintf(&(out[outIndex]), "%d", 0); outIndex++; } out[outIndex] = '\\0'; } 

在调试模式下:程序运行到主要功能结束并显示以下消息:

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

outIndex的最大值始终为8。 z具有8个字节的内存。 不是吗

问题是什么?

谢谢!

在这里,您似乎占用了字节的上半部分和下半部分。

Digit[0] = (digits[i] & HIGH) / 16;
Digit[1] = digits[i] & LOW;

这些是十六进制数字:范围是0-15。

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

在中使用%c代替%d

sprintf(&(out[outIndex]), "%d", Digit[j]);

运行良好吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM