Último caractere em uma seqüência de caracteres
Use as seguintes dicas:
Trilha byte intervalos se sobrepõem o conjunto em muitos casos de caracteres ASCII.Você pode usar com segurança bytewise varreduras para quaisquer caracteres de controle (menos de 32).
Considere a seguinte linha de código, que pode verificar se o último caractere na string é um caractere de barra invertida:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Porque strlen não está ciente em MBCS, retorna o número de bytes, não o número de caracteres, uma seqüência de caracteres multibyte.Além disso, observe que, em algumas páginas (932, por exemplo), de código ' \' (0x5c) é um byte de seguimento válido (sz é uma seqüência de C).
Uma solução possível é regravar o código dessa forma:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
Esse código usa as funções MBCS _mbsrchr e _mbsinc.Como essas funções são ciente de MBCS, eles podem distinguir entre uma ' \' caractere e um byte de seguimento ' \'.O código executa alguma ação se o último caractere na seqüência de caracteres é um valor nulo ('\0').