Поделиться через


Последний знак в строке

Обновлен: Ноябрь 2007

Рекомендации:

  • В большинстве случаев диапазоны младшего байта перекрывают набор знаков 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"), в этом коде выполняются определенные действия.

См. также

Основные понятия

Советы по программированию многобайтовой кодировки

Присваивание символов