Последний символ в строке
Рекомендации:
В большинстве случаев диапазоны младшего байта перекрывают набор знаков ASCII.В связи с этим обеспечивается безопасность побайтового поиска любых управляющих символов (менее 32).
Рассмотрим следующую строку кода, в которой должно проверяться, является ли последний знак строки знаком обратной косой черты:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Поскольку функция strlen не поддерживает многобайтовую кодировку, в результате ее выполнения возвращается число байтов, а не число знаков, в многобайтовой строке.Также обратите внимание, что при использовании некоторых кодовых страниц (например 932) знак "\" (0x5c) является допустимым младшим байтом (sz — строка C).
Чтобы устранить эту ошибку, можно изменить код следующим образом:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
В этом коде используются функции многобайтовой кодировки _mbsrchr и _mbsinc.Поскольку эти функции поддерживают многобайтовую кодировку, в них различаются знак "\" и младший байт "\".Если последним знаком строки является нуль ("\0"), в этом коде выполняются определенные действия.