文字列の最後の文字
次のヒントを参考にしてください。
多くの場合、末尾のバイト範囲は ASCII 文字セットと重複しています。 任意の制御文字 (32 未満) に対して、バイト単位のスキャンを安全に使用できます。
次のコード行について考えてみます。文字列の最後の文字が円記号であるかどうかを確認している場合があります。
if ( sz[ strlen( sz ) - 1 ] == '\\' ) // Is last character a '\'? // . . .
strlen
は MBCS に対応していないため、マルチバイト文字列の文字数ではなくバイト数を返します。 また、一部のコード ページ (932 など) では、'\' (0x5c) は有効な末尾バイト (sz
は C 文字列) であることに注意してください。考えられる解決策の 1 つは、次のようにコードを書き換えることです。
char *pLast; pLast = _mbsrchr( sz, '\\' ); // find last occurrence of '\' in sz if ( pLast && ( *_mbsinc( pLast ) == '\0' ) ) // . . .
このコードでは、MBCS 関数
_mbsrchr
と_mbsinc
を使用します。 これらの関数は MBCS に対応しているため、'\' 文字と末尾バイト '\' を区別できます。 文字列の最後の文字が null 値 ('\0') の場合、コードはなんらかのアクションを実行します。