@FX-Mercury

Плохо знаю указатели. Какие подводные камни скрывает моя функция?

size_t str_len( const char *str )
{
    const char *begin = str;
	
    while( *str++ != '\0' ) 
        ;

    return ( str - begin - 1 );
}

void main( void )
{
    char *text = "hello";

    cout<<str_len(text);

    cin.get();

    system("pause");
}
  • Вопрос задан
  • 463 просмотра
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
На C++ спускаться до сырых указателей нужно в крайне редких случаях.
Ответ написан
@vilgeforce
Раздолбай и программист
Стандартная проблема: внутри функции str может уйти в память, к которой у него не будет доступа. И вылетит исключение.
Ответ написан
Nipheris
@Nipheris Куратор тега C++
А когда людям надоело, что такие функции уходят в память, к которой у функции нет доступа (в т.ч. за счет специально сфабрикованных параметров, приводящих к неприятным последствиям, см. buffer overflow), придумали парные "безопасные" варианты, например strnlen. Там помимо строки, вторым параметром указывается максимально возможная длина переданной строки (к примеру, для пути к файлу это будет 255 символов). Обычно это длина какого-либо буфера, в который помещается строка. Аналогичные пары есть и для других функций: strcpy/strncpy и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы