Вот почему xxx_s
функции не безопасны :-) Люди могут использовать эти безопасные функции так же легко, как и так называемые «небезопасные».
sscanf
со спецификатором формата %x
требует указатель int
, а не char
.
Он будет записывать все (например) 32-битное значение, начиная с uChar
и не обращая внимания на один бит, что он перезаписывает в процессе.
Только потому, что у вас включена защита стека, код перехватывает это.
Вы должны использовать что-то вроде:
void Cfsp::stringToHex (unsigned char hexArray[], LPCTSTR string) {
int stringLength = strlen (string);
int j = 0;
unsigned int uChar = 0; // <-- INT rather than char.
for (int x = 0; x < stringLength; x+=2) {
sscanf_s (&string[x], "%02x", &uChar);
hexArray[j] = uChar;
j++;
}
}