次の方法で共有


文字列の最後の文字

次のヒントを参考にしてください。

  • 後続バイトの範囲は、多くの場合、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") の場合でも、コードはなんらかの動作をします。

参照

概念

MBCS のプログラミングについて

文字の代入