![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |
文字列クラスは煩雑なバッファ ( メモリ ) 管理をカプセル化してくれます。
文字列クラスは、文字列を格納する内部バッファを持ちます。
内部バッファの終端には自動的に '\0' が付加されます。
内部バッファのポインターを取得する関数は2種類あります。
表 11.4. 内部バッファポインター取得関数
| 関数名 | 解説 | 文字列が「空」である場合の振る舞い |
|---|---|---|
| SFXAnsiString::GetBuffer | 文字列の内部バッファーへのポインターを取得します。 | null を返します。 |
| SFXAnsiString::GetCString | 文字列の内部バッファーへの const ポインターを取得します。(内部バッファーの内容を変更できません) | null を返します。"\0" へのポインターを返します。 |
![]() |
注意 |
|---|---|
| 文字列が空文字列のとき、SFXAnsiString::GetBuffer は null を、 SFXAnsiString::GetCString は '\0' を指すポインターを返します。 | |
例 11.31. SFXAnsiString::GetBuffer と SFXAnsiString::GetCString の動作の違い
SFXAnsiString str; // null ポインターを返すのでエラーが起こる TRACE("%s", str.GetBuffer()); // 空文字を指すポインターを返すので正しく動作する TRACE("%s", str.GetCString());
文字列クラスでは、複数の '\0' を含む文字列を扱えます。
以下の関数の動作は異なります。
表 11.5. 複数の '\0' を含む文字列動作一覧
| 関数名 | 解説 |
|---|---|
| SFXAnsiString::GetLength | 文字列の文字数を取得します。 |
| SFXAnsiString::GetLengthCString | 先頭の null ターミネート文字列の文字数を取得します。 |
| SFXAnsiString::IsEmpty | 文字列の長さが 0 か判定します。 |
| SFXAnsiString::IsEmptyCString | 先頭の文字列が null ターミネートか判定します。 |
Attach 関数は、文字列クラスの内部バッファを破棄し、ユーザーが MemoryAllocate などで確保したメモリを内部バッファとする関数です。
Attach したメモリは文字列クラスが解放権を持ちます。
例 11.33. Attach 関数の使い方
// 第 2 引数で文字列の長さを設定しない場合は "abc" だけが登録される SFXAnsiString str; ACharPtr ptr; ptr = static_cast<ACharPtr>(MemoryAllocate(10240)); // メモリを確保する // 確保したメモリを使う処理 // 確保したメモリを文字列クラスに移譲する str.Attach(ptr, 10240); // ptr を明示的に解放してはいけない // Attach 関数を使わない場合 // str.Set(ptr, 10240); // ptr の中身がコピーされるので、スピードは遅くなることに注意が必要
Detach 関数は、文字列クラスの内部バッファの解放権をユーザーに渡す関数です。
Detach 関数が返すメモリ ( へのポインター ) はユーザーが MemoryFree で解放する必要があります。
|
Copyright (C) 2002 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|