簡體   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