次の方法で共有


ポインターのインクリメントとデクリメント

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

  • 後続バイトではなく、常に先行バイトを指すようにします。後続バイトへのポインターを持つことは危険です。通常は、逆方向からではなく、順方向に文字列スキャンを行うようにします。

  • 文字単位でポインター値を増減できる、インクリメント/デクリメント関数とマクロが用意されています。

    sz1++;
    

    上のコードは、次のようになります。

    sz1 = _mbsinc( sz1 );
    

    _mbsinc 関数と _mbsdec 関数は、文字のバイト サイズとは無関係に、あくまで "character 単位" で正しくポインターを増減させます。

  • 次に示すように、デクリメントには文字列の先頭へのポインターが必要になります。

    sz2--;
    

    上のコードは、次のようになります。

    sz2 = _mbsdec( sz2Head, sz2 );
    

    または、次のように文字列の中の有効文字を先頭ポインターとすることができます。

    sz2Head < sz2
    

    先行バイトへの有効なポインターが必要です。

  • 前の文字へのポインターを保持しておいた方が _mbsdec への呼び出しが速くなる場合があります。

参照

概念

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

バイト インデックス