find()返回unsigned int的最大值

时间:2015-10-08 03:25:22

标签: c++

我完成了一项家庭作业,要求我在同一个命令中重定向输入和输出。搜索&#34时的命令(即字符串);<"和">" if语句总是返回true。这是因为它在64位系统上找到了unsigned int的最大值。

if (uCommand.find("<",0) && uCommand.find(">", 0))语句将始终为真。当我在gdb中运行uCommand.find(&#34;&gt;&#34;,0)时返回18446744073709551615。

int main(int argc, char *argv[]) {
// local variables
char **toks;
int retval;
int ii;
int redirect;
int search;
string fileName;

// initialize local variables
toks = NULL;
retval = 0;
ii = 0;

// main (infinite) loop
while (true)
{
    // get arguments
    toks = gettoks();

    if (toks[0] != NULL)
    {
        for (ii = 0; toks[ii] != NULL; ii++) {
            uCommand += " ";
            uCommand += (string)toks[ii];
        }
        // Search for input, output, or dual redirection
        if (uCommand.find("<", 0) && uCommand.find(">", 0))
        {
            redirect = dualRedirect(toks, uCommand);
            addHist(uCommand);
        }
        else if (uCommand.find("<", 0)) {
            redirect = inRedirect(toks, uCommand);
            addHist(uCommand);
        }
        else if (uCommand.find(">", 0)) {
            redirect = outRedirect(toks, uCommand);
            addHist(uCommand);
        }

        // Look for hist or r and execute the relevant functions
        if (!strcmp(toks[0], "r"))
            repeatCommand(uCommand);
        else if (!strcmp(toks[0], "hist")) {
            addHist(uCommand);
            showHist();
        }
        else if (redirect == 0) {
            execCommand(toks);
            addHist(uCommand);
        }

        // Increment the command count.  This only runs if a something is entered
        // on the command line.  Blank lines do not increment this value.
        commandCount++;
    }
}

// return to calling environment
return(retval);

}

1 个答案:

答案 0 :(得分:2)

我假设uCommandstd::string,因为你没有包含它的声明。

当找不到任何内容时,

std::string::find会返回std::string::npos。这通常是(size_t)-1size_t是无符号类型,这意味着npos是一个非常大的值。您不能将此视为bool,因为任何非零都被视为true

您的代码应为

if (uCommand.find("<", 0) != std::string::npos && uCommand.find(">", 0)  != std::string::npos)