【发布时间】:2014-07-24 19:36:58
【问题描述】:
我正在尝试将包含由空格分隔的多个值的 std::string 转换为向量对象。我让它工作(意味着调试器在算法结束时在向量中显示正确的值),但是我遇到了一个我以前从未见过的异常。例外情况如下:
我以前从未见过这种情况,我已经研究了一个小时来研究导致这种情况的原因,但我仍然不明白。
导致异常的算法如下:
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
我不知道如何解决这个问题。正如我所说,算法在我得到正确结果的意义上“有效”,我只需要清除异常。我该如何解决这个问题?
【问题讨论】:
-
将
temp设为整数?我不知道,只是刺伤。 -
尝试使用 %c 扫描 char 而不是 %x 扫描 int。另外,不要在 C++ 中使用 sscanf。
-
您似乎以某种方式溢出了 temp 值。 sscanf() 的用户输入应该是什么?
标签: c++ exception stack-corruption