Último carácter de una cadena
Siga estas sugerencias:
Los rangos de bytes finales se superponen al juego de caracteres ASCII en muchos casos. Puede usar de forma segura exámenes byte por byte para cualquier carácter de control (menos de 32).
Tenga en cuenta la siguiente línea de código, que podría estar comprobando para ver si el último carácter de una cadena es un carácter de barra diagonal inversa:
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Dado que
strlen
no es compatible con MBCS, devuelve el número de bytes, no el número de caracteres, en una cadena multibyte. Además, tenga en cuenta que en algunas páginas de código (932, por ejemplo), "\" (0x5c) es un byte final válido (sz
es una cadena C).Una posible solución consiste en volver a escribir el código de esta manera:
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
Este código usa las funciones de MBCS
_mbsrchr
y_mbsinc
. Dado que estas funciones son compatibles con MBCS, pueden distinguir entre un carácter '\' y un byte final '\'. El código realiza alguna acción si el último carácter de la cadena es null ('\0').
Consulte también
Sugerencias de programación para MBCS
Asignación de caracteres