C++11 char16_t strlen-эквивалентная функция

У меня простой вопрос: есть ли способ сделать strlen()-подобное количество символов в конце с нулем char16_t массив?

3 ответа

Решение

Использование

char_traits<char16_t>::length(your_pointer)

см. 21.2.3.2struct char_traits<char16_t> и таблица 62 С ++11-й стандарт.

Используйте указатели:), создайте дублирующий указатель на начало, а затем переберите его while (*endptr++);тогда длина определяется как endptr - startptr, Вы можете на самом деле шаблонировать это, однако, возможно, что компиляция не сгенерирует тот же встроенный код, что и для strlen(для разных размеров).

Ответ Necrolis включает в длину байт NULL, что, вероятно, не то, что вам нужно. strlen() не включает байт NULL в длину.

Адаптация их ответа:

      static size_t char16len(uint16_t *startptr)
{
        uint16_t *endptr = startptr;
        while (*endptr) {
                endptr++;
        }
        return endptr - startptr;
}

Я понимаю, что есть принятый ответ на С++, но этот ответ полезен для всех, кто наткнется на этот пост, используя C (как и я).

Другие вопросы по тегам