我正在尝试将包含多个由空格分隔的值的 std::string 转换为 vector 对象。我让它工作(意味着调试器在算法结束时在 vector 中显示正确的值),但是我遇到了一个我以前从未见过的异常。异常(exception)情况如下:
我以前从未见过这种情况,我已经研究了一个小时是什么导致了这种情况,但我仍然不明白。
导致异常的我的算法如下:
vector<BYTE> ConvertStringOfValuesToVectorOfBytes(std::string valStr)
{
vector<string> vectorOfValues = split(valStr, ' '); //split string into vector of strings (works)
vector<BYTE> Hex;
vector<const char*> vectOfCStrings;
for(int i = 0; i < vectorOfValues.size(); i++)
{
const char* temp = vectorOfValues[i].c_str();
vectOfCStrings.push_back(temp);
}
//now we have a vector of c strings...
for(int i = 0; i < vectOfCStrings.size(); i++)
{
char temp = 0;
sscanf(vectOfCStrings[i], "%x", &temp);
Hex.push_back(temp);
}
return Hex;
} //<-- debugger gets to here and on the next step causes the exception
我不知道如何解决这个问题。正如我所说,算法在我得到正确结果的意义上“有效”,我只需要清除异常。我该如何解决这个问题?
最佳答案
这条线不对:
sscanf(vectOfCStrings[i], "%x", &temp);
%x
格式用于int
,而不是char
。
您正在获取堆栈损坏,因为 sscanf
需要一个 int
的地址。它会尝试使用您传递的能够容纳 int
的地址。它显然使用了比有效内存更多的内存。
你需要的是:
for(int i = 0; i < vectOfCStrings.size(); i++)
{
int temp = 0;
sscanf(vectOfCStrings[i], "%x", &temp);
Hex.push_back(static_cast<char>(temp));
}
关于c++ - 变量 'temp' 周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942514/