Último caractere em uma cadeia de caracteres
Use as dicas a seguir:
Intervalos de bytes de trilha se sobrepõem ao conjunto de caracteres ASCII em muitos casos. Você pode usar verificações de bytes com segurança para quaisquer caracteres de controle (menos de 32).
Considere a seguinte linha de código, que pode estar verificando se o último caractere em uma cadeia de caracteres é um caractere de barra invertida:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Como
strlen
não tem reconhecimento de MBCS, ele retorna o número de bytes, não o número de caracteres, em uma cadeia de caracteres multibyte. Além disso, observe que em algumas páginas de código (932, por exemplo), '\' (0x5c) é um byte de trilha válido (sz
é uma cadeia de caracteres C).Uma solução possível é reescrever o código desta forma:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
Esse código usa as funções
_mbsrchr
MBCS e_mbsinc
. Como essas funções têm reconhecimento de MBCS, elas podem distinguir entre um caractere '\' e um byte de trilha '\'. O código executará alguma ação se o último caractere na cadeia de caracteres for nulo ('\0').