gpt4 book ai didi

c++ - 变量 'uChar' 周围的堆栈已损坏

转载 作者:太空狗 更新时间:2023-10-29 23:33:57 26 4
gpt4 key购买 nike

这是将十六进制字符串转换为字节数组的代码,它工作正常但是当循环结束并且编译器到达函数末尾时它会抛出此错误:“变量‘uChar’周围的堆栈已损坏”

void Cfsp::stringToHex(unsigned char hexArray[], LPCTSTR string)
{
int stringLength=strlen(string);
int j=0;
unsigned char uChar = 0;
for (int x = 0; x < stringLength; x+=2)
{
sscanf_s(&string[x], "%02x", &uChar);
hexArray[j] = uChar;
j++;
}
}

这里是我初始化数组和调用函数的地方。

unsigned char Key[16];
stringToHex( Key,"2f145a8b11d33217");

我知道什么时候 stringToHex 会将给定的字符串(16 个字符长度)转换为字节数组,它只填充 8 个字节(作为 char)。我只是想在缓冲区中创建一个保留区域。

最佳答案

这就是为什么 xxx_s 函数安全 :-) 人们可以像所谓的“不安全”函数一样容易地滥用这些安全函数。

带有 %x 格式说明符的

sscanf 需要一个 int 指针,而不是一个 char 指针。

它将写入从 uChar 开始的整个(例如)32 位值,并且不关心它在此过程中覆盖的内容。

只是因为您启用了堆栈保护,代码才会捕获到它。

你应该使用类似的东西:

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++;
}
}

关于c++ - 变量 'uChar' 周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7413301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com