2009-11-14 2 views
1

Эта программа должна найти аргументы командной строки, введенные в Unix, которая заканчивается на «.exe». По какой-то причине это не работает. Вот код:Сравнение символов в конце строки 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

+1

Если вы используете компиляцию gcc try следующим образом: g ++ -Wreturn-type ..., чтобы увидеть проблему с вашим кодом. –

+0

@Naveen: На самом деле, я не искал, является ли это ошибкой или нет, просто считается без доказательства того, что компилятор Пата в этом отношении совместим. Я имею в виду «должен» в смысле «это то, что компиляторы часто замечают». Предполагая, что компилятор не должен отклонять код, и если вы ищете обоснование, то я бы предположил, что это потому, что для обнаружения ошибки требуется крошечный анализ пути выполнения, поэтому, возможно, стандарт не хотел мандат. –

3

У вашей функции findExe есть ветка, которая не возвращает результат ... как сказал Стив, компилятор должен был предупредить вас.

+0

Да, если вы используете gcc try компиляции следующим образом: g ++ -Wreturn-type ..., чтобы увидеть проблему с вашим кодом. –

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; 
} 
Смежные вопросы