ポインターのインクリメントとデクリメント
次のヒントを参考にしてください。
後続バイトではなく、常に先行バイトを指すようにします。後続バイトへのポインターを持つことは危険です。通常は、逆方向からではなく、順方向に文字列スキャンを行うようにします。
文字単位でポインター値を増減できる、インクリメント/デクリメント関数とマクロが用意されています。
sz1++;
上のコードは、次のようになります。
sz1 = _mbsinc( sz1 );
_mbsinc 関数と _mbsdec 関数は、文字のバイト サイズとは無関係に、あくまで "character 単位" で正しくポインターを増減させます。
次に示すように、デクリメントには文字列の先頭へのポインターが必要になります。
sz2--;
上のコードは、次のようになります。
sz2 = _mbsdec( sz2Head, sz2 );
または、次のように文字列の中の有効文字を先頭ポインターとすることができます。
sz2Head < sz2
先行バイトへの有効なポインターが必要です。
前の文字へのポインターを保持しておいた方が _mbsdec への呼び出しが速くなる場合があります。