签名/未签名函数的警告

时间:2015-02-13 18:34:05

标签: c++

我编写了一个函数来解析字符串参数作为我项目的一部分。功能正常,但我收到一条警告: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;
    }

2 个答案:

答案 0 :(得分:1)

b.length()返回未签名的size_t。在for循环中,您要将已签名的int i与未签名的b.length()进行比较,这就是您看到警告的原因。要摆脱它,在使用size_t i指示数组索引时,请使用int i而不是i

无关:您在if (b[i+1] == '"')处有一个超出界限的访问权限。

答案 1 :(得分:0)

您可以使用unsigned避免signedstd::string::iterator比较无意义。

for ( auto iter = b.start(); iter != b.end(); ++iter )