O último caractere em uma cadeia de caracteres
Use as dicas a seguir:
Intervalos de byte de trilha de sobreponham o conjunto em muitos casos de caractere 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 em uma seqüência de caracteres é um caractere de barra invertida:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Porque strlen não está ciente em MBCS, ela retorna o número de bytes, não o número de caracteres, em uma seqüência de caracteres de multibyte. Além disso, observe que em algumas páginas (932, por exemplo), de código ' \ ' (0x5c) é um byte final válido (sz é uma seqüência de caracteres de C).
Uma solução possível é regravar 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 o MBCS funções _mbsrchr e _mbsinc. Como essas funções são sensíveis à MBCS, eles podem distinguir entre um ' \ 'caractere e um byte final' \ '.O código executa alguma ação se o último caractere na seqüência de caracteres é um valor nulo ('\0').