Почему выбивает исключение Run-Time Check Failure #2 - Stack around the variable 'UnitStateWord' was corrupted?
#include <iostream>
#include <stdio.h>
#include <Windows.h>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char m,
n,
l,
w;
unsigned __int16 UnitStateWord;
printf("Введите слово состояния устройства \n");
printf("(16-ричное число от 0 до 0xFFFF) >");
scanf_s("%x", &UnitStateWord);
m = (UnitStateWord >> 13) & 7;
n = (UnitStateWord >> 10) & 7;
l = (UnitStateWord >> 8) & 1;
w = UnitStateWord & 0xFF;
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Потому что
unsigned __int16 UnitStateWord;
подразумевает 2 байта в UnitStateWord, а "%x" - четырехбайтовое целое. В результате запись идет в память за пределами переменной и портит стек...
Кстати, VC++ прямо говорит об этом:
t.cpp(18): warning C4477: "scanf_s": в строке форматирования "%x" требуется аргумент типа "unsigned int *", но вариативный аргумент "1" имеет тип "unsigned short *"
t.cpp(18): note: рекомендуется использовать "%hx" в строке форматирования
Чем вы компилировали? или просто не поняли сообщение?