Último caractere em uma seqüência de caracteres.
Use as seguintes dicas:
Os intervalos de bytes de trilha de sobreponham o caractere ASCII definido em muitos casos. Você pode usar com segurança varreduras bytewise para quaisquer caracteres de controle (menos de 32).
Considere a seguinte linha de código, que pode ser verificado 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, ele retorna o número de bytes, não o número de caracteres, em uma seqüência de caracteres multibyte. Além disso, observe que, em alguns, código de páginas (932, por exemplo), ' \' (0x5c) é um byte de seguimento válido (sz é uma seqüência 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 MBCS _mbsrchr e _mbsinc. Como essas funções são sensíveis a MBCS, pode distinguir um ' \' um byte de seguimento e de caractere ' \'. O código realiza alguma ação se o último caractere na seqüência de caracteres é nulo ('\0').