Сравнить символы в конце строки C ++ - PullRequest
1 голос
/ 14 ноября 2009

Эта программа должна найти аргументы командной строки, введенные в Unix, которые заканчиваются на «.exe». По какой-то причине это не работает. Вот код:

 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;
}

Ответы [ 3 ]

6 голосов
/ 14 ноября 2009

Удалите else, я думаю (хотя я не скомпилировал код для проверки). В случае, когда длина составляет не менее 4, но сравнение строк возвращает ненулевое значение, вы достигаете конца функции без возврата. Ваш компилятор должен был предупредить вас: включите больше предупреждений.

3 голосов
/ 14 ноября 2009

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

0 голосов
/ 14 ноября 2009

Как насчет этого?

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...