我完成了一项家庭作业,要求我在同一个命令中重定向输入和输出。搜索&#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);
}
答案 0 :(得分:2)
我假设uCommand
是std::string
,因为你没有包含它的声明。
std::string::find
会返回std::string::npos
。这通常是(size_t)-1
,size_t
是无符号类型,这意味着npos
是一个非常大的值。您不能将此视为bool
,因为任何非零都被视为true
。
您的代码应为
if (uCommand.find("<", 0) != std::string::npos && uCommand.find(">", 0) != std::string::npos)