我编写了一个函数来解析字符串参数作为我项目的一部分。功能正常,但我收到一条警告:C4018: '<' : signed/unsigned mismatch
。我不知道为什么会出现这个警告。我可以在这里得到一些帮助。谢谢!
void FileMgr::parseCmdLineForTextSearch(std::string b)
{
int count=0;
int flag = 0;
patternVector.clear();
for (int i = 0; i < b.length(); i++) // this line where
// the warning line comes
{
if (b[i] == '"')
{
count++;
}
}
if (count == 2)
{
for (int i = 0; i < b.length(); i++)
{
if (b[i+1] == '"')
{
flag = 1;
tmp = b.substr(0, i+1);
tmp.erase(0, 1);
break;
}
else
{
continue;
}
}
std::istringstream iss(b);
std::string word;
while (iss >> word)
{ // for each word in b
if (word.find("*.") == 0)
{ // if it starts with *.
patternVector.push_back(word); // add it
}
}
if (patternVector.size() == 0)
{
patternVector.push_back("*.*");
}
isCorrect = true;
}
else
isCorrect = false;
}
答案 0 :(得分:1)
b.length()
返回未签名的size_t
。在for
循环中,您要将已签名的int i
与未签名的b.length()
进行比较,这就是您看到警告的原因。要摆脱它,在使用size_t i
指示数组索引时,请使用int i
而不是i
。
无关:您在if (b[i+1] == '"')
处有一个超出界限的访问权限。
答案 1 :(得分:0)
您可以使用unsigned
避免signed
和std::string::iterator
比较无意义。
for ( auto iter = b.start(); iter != b.end(); ++iter )