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 vérifier si le dernier caractère d’une chaîne est une barre oblique inverse :
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
Étant donné qu’il
strlen
ne prend pas en charge MBCS, 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
MBCS et_mbsinc
. Étant donné que ces fonctions sont conscientes de MBCS, 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').