运行此代码时,我编码错误:变量window_text_hex
周围的堆栈已损坏。我看不出错误了?
DWORD WINAPI fill_matrix(LPVOID lpParameter)
{
char window_text_hex[5];
for (int i = 0; i < 8; i++){
int data_j = 0;
for (int j = 0; j <8; j++)
{
char window_text[5] = { mySerial.data[i][data_j], mySerial.data[i][data_j + 1], mySerial.data[i][data_j + 2], mySerial.data[i][data_j + 3], '\0' };
for (int i = 0; i<4; i++)
{
sprintf(&window_text_hex[i], "%02X", window_text[i]);
}
SetWindowTextA(hWndLabel[i * 8 + j], window_text_hex);
data_j += 4;
}
}
return 0;
}
mySerial.data是[8] [36]
的数组答案 0 :(得分:4)
在for循环中,i
可以是3
。
您是sprintf
window_text_hex+3
,其中有两个字节(window_text_hex[3]
,windows_text_hex[4]
)的空间。
sprintf
%02X
至少写入三个字节:两个十六进制数字和一个'\0'
终结符。
(由于您传递了char
,它实际上可能会写得更多。char
通常是签名类型,但%X
需要unsigned int
。所以负输入(如-1
)生成长输出(FFFFFFFF
)。修复:(unsigned char)window_text[i]
。)
您正在写window_text_hex
数组的结尾。