运行时检查失败 #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] = ' '; }
在调试模式下:程序运行到main函数结束并显示信息:
运行时检查失败#2 -变量'z'周围的堆栈损坏
outIndex的最大值总是8。z有8字节的内存。不是吗?
有什么问题吗?
谢谢!
这里似乎取了字节的上半部分和下半部分。
Digit[0] = (digits[i] & HIGH) / 16;
Digit[1] = digits[i] & LOW;
这些是十六进制数字:它们的范围是0-15。
这意味着如果最后一位数字大于9,sprintf
和%d
将打印3个字符(2位数字和