前のページ次のページ上に戻るホーム SophiaFramework 2.0

4.6. バッファの直接操作

文字列クラスでは提供されていない操作を行いたい場合は、 文字列クラスの所有するバッファ ポインタを取得して、 直接メモリにアクセスします。


SFUAnsiString astr("No smoking");

AChar * pch = astr.GetRaw();

pch[0] = 'D';

GetRaw 関数は文字列クラスが所有しているバッファへのポインタをそのまま返します。 内部バッファがないときは NULL を返しますので、 必ず NULL ポインタのチェックを行うようにしてください。

文字列クラスの操作を行うと、内部バッファのアドレスが変更されることがあります。 内部バッファのアドレスを GetRaw で取得した後に、 その文字列クラスに対して操作を行うと、 取得したアドレスが内部バッファを指さないことがありますので、 十分に注意をしてください。


SFUAnsiString astr("Harry Potter");

AChar * pch = astr.GetRaw();

astr.Replace("Harry", "Horry")

pch[0] = 'S';         // 誤りです

この例では、Replace 関数により文字列クラスのバッファ ポインタが変更されている可能性があります。 Replace 関数を呼び出した後に、 pch 変数に記憶しておいたポインタでメモリにアクセスすると、 文字列クラスの内部バッファ以外のメモリを書き換えてしまうことがあるため、 このような使用法は誤りです。