LINUX.ORG.RU

check_ip_failed


0

0

Вот написал ф-цию для проверки ип на правильность написания.
Интересно узнать мнение, конструктивные советы и т.д.
Может быть у кого то есть написанная намного лучше, поделитесь.

bool check_ip_failed ( const std::string &host )
{
    if ( host.size() > 15 ) return true;
    if ( host.size() - 1 == host.find_last_of ( '.' ) ) return true;
    int i = -1;
    for ( int j = 0 ; j < 4 ; j ++ )
        i = host.find_first_of ('.', i + 1 );
    if ( i != -1 ) return true;
        i = 0;
    int cx = 0;
    while ( ( unsigned ) i < host.size() )
    {
        char *buf;
        buf = new char[20];
        cx = 0; bzero ( buf, 20 );
        while ( ( host[i] != '.' ) and ( ( unsigned ) i < host.size() ) )
            buf[cx++] = host[i++];
        i++;
        if ( !cx ) return true;
        cx = atoi ( buf );
        if ( ( cx > 255 ) or ( cx < 1 ) ) return true;
        delete[] buf;
    }
    return false;
}
anonymous

Re: check_ip_failed

Может быть стоило воспользоваться готовым велосипедом inet_aton() ?
Или ваш способ определенно лучше?

Dead ★★★★ ()
Ответ на: Re: check_ip_failed от anonymous

Re: check_ip_failed

Ну если напрягает то, что inet_aton или inet_addr кроме проврки еще и конвертируют, тогда согласен.

Dead ★★★★ ()
Ответ на: Re: check_ip_failed от Dead

Re: check_ip_failed

Ну как, не напрягает, а просто не понятна необходимость описывать структуру (лишние память и код) и также inet_aton будет тратить время(процессорное) на запонение полей этой структуры, и только как "побочный" эффект будет проверять на правильность сам айпи адресс.

anonymous ()
Ответ на: Re: check_ip_failed от anonymous

Re: check_ip_failed

а если сделать проще?
bool check_ip_failed() {
  if (inet_addr(host.c_str()) == INADDR_NONE) {
      cerr << "bad IP" << endl;
      return true;
  }
  return false;
}

и замерять, что быстрее.
Мне почему-то кажется что такой способ побыстрее будет.

Dead ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.