Dernier caractère d'une chaîne
Utilisez les conseils suivants :
Les plages d’octets de fin chevauchent le jeu de caractères ASCII dans de nombreux cas. Vous pouvez utiliser en toute sécurité des analyses d’octets pour tous les caractères de contrôle (inférieurs à 32).
Considérez la ligne de code suivante, qui peut être case activée pour voir si le dernier caractère d’une chaîne est un caractère de barre oblique inverse :
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Comme
strlen
il n’est pas Mo CS, il retourne le nombre d’octets, et non le nombre de caractères, dans une chaîne multioctet. Notez également que dans certaines pages de codes (932, par exemple), '\' (0x5c) est un octet de fin valide (sz
est une chaîne C).Une solution possible consiste à réécrire le code de cette façon :
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
Ce code utilise les fonctions
_mbsrchr
Mo CS et_mbsinc
. Étant donné que ces fonctions sont Mo CS, elles peuvent faire la distinction entre un caractère « \ » et un octet de fin « \ ». Le code effectue une action si le dernier caractère de la chaîne est null ('\0').