2009-11-14 42 views
1

该程序应该查找以“.exe”结尾的Unix上输入的命令行参数。由于某种原因,它不起作用。这里是代码:在字符串C++的末尾比较字符

int main(int argc, char* argv[]) 
{ 
    for (int i = 1; i < argc; i++) 
    if(findExe(argv[i])) 
     cout << argv[i] << endl; 

    return 0; 
} 
bool findExe(char* argument) 
{ 
    if (strlen(argument) >= 4) 
    { 
     string testExe = ".exe"; 
     string initialWord=argument; //converts c-string to string 
     string temp(initialWord,(initialWord.size() - 4),4);//creates temp with last four characters from initialWord 

     if (!temp.compare(testExe)) 
     return true; 
    } 
    else 
    return false; 
} 

回答

6

删除else,我认为(虽然我没有编译代码来检查)。在长度至少为4的情况下,但字符串比较返回非零值时,可以在不返回的情况下到达函数的结尾。您的编译器应该警告过您:打开更多警告。

+0

作为一个便笺,任何想法,为什么它只是一个警告,而不是一个错误? – Naveen 2009-11-14 17:42:06

+1

如果你使用的是gcc,试试像这样编译:g ++ -Wreturn-type ...来查看你的代码的问题。 – 2009-11-14 17:45:58

+0

@Naveen:实际上,我没有看过它是否是错误,只是假设没有证明Pat的编译器在这方面是兼容的。我的意思是“应该”,意思是“这是编译器经常注意的事情”。假设编译器不需要拒绝代码,并且如果你正在寻找一个基本原理,那么我会推测这是因为发现这个错误需要少量的执行路径分析,所以标准可能不希望强制要求。 – 2009-11-14 17:47:16

3

你的findExe函数有一个不返回结果的分支......就像Steve说的那样,编译器应该已经警告过你。

+0

是的,如果你使用的是gcc,试试像这样编译:g ++ -Wreturn-type ...来查看你的代码的问题。 – 2009-11-14 17:44:03

0

这个怎么样?

bool findExe(char* argument) 
{ 
    int n = strlen(argument); 
    if (n < 4) return false; 
    char* ext = argument[n-4]; 
    if (strcmp(ext, ".exe") == 0) return true; 
    return false; 
}