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 (как и я).