「Stringクラス」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
(→‎ZeroString: 説明記述)
 
3行目: 3行目:
 
== クラスの機能 ==
 
== クラスの機能 ==
  
=== メンバ・プロパティ ===
+
===公開メソッド===
  
==== Chars ====
+
====コンストラクタ====
Chars As *Byte
 
Stringが保持している文字列へのポインタです。これを通じて内容の読み取り・書き込みを行うことができます。
 
 
 
==== Length ====
 
Length As Long
 
Stringが保持している文字列の長さを表しています。基本的に書き換えないでください。
 
 
 
=== メソッド ===
 
 
 
==== コンストラクタ ====
 
 
Stringインスタンスを初期化します。
 
Stringインスタンスを初期化します。
 
  Sub String()
 
  Sub String()
デフォルトコンストラクタ)空文字列を作ります。
+
(デフォルトコンストラクタ)空文字列を作ります。
  Sub String(ByRef initStr As String)
+
  Sub String(initStr As PCWSTR, length As Long)
(未実装)コピーコンストラクタです。initStrの内容で初期化します。
+
Sub String(initStr As PCSTR, length As Long)
; 注意 : 現在実装されておらず、これを使用しようとすると変換演算子により*Byte引数のコンストラクタが呼ばれます。文字列中にナル文字を含むStringインスタンスを引数にする際には注意が必要です。
+
initStrで示される内容で文字列を作ります。長さはlengthで指定します。
 
+
Sub String(initStr As PCWSTR)
  Sub String(ByVal initStr As *Byte)
+
Sub String(initStr As PCSTR)
initStrの内容で初期化します。initStrはヌル終端の文字列を指定します。
+
initStrで示される内容で文字列を作ります。ヌル文字で終端しているとして扱われます。
 +
  Sub String(initStr As String)
 +
initStrの複製を作ります。
 +
Sub String(initChar As StrChar, length As Long)
 +
initCharがlengthの数だけ並んだ文字列を作成します。
  
 
==== デストラクタ ====
 
==== デストラクタ ====
 
Stringインスタンスの破壊時に呼ばれます。
 
Stringインスタンスの破壊時に呼ばれます。
 
  Sub ~String()
 
  Sub ~String()
文字列のメモリを解放します。
 
 
==== 代入 ====
 
Stringオブジェクトに文字列を割り当てます。
 
Sub Operator = (ByRef text As String)
 
Sub Operator = (ByVal text As *Byte)
 
Assign(text)と同じです。
 
 
==== Assign ====
 
Stringオブジェクトに文字列を割り当てます。
 
Sub Assign(ByRef text As String)
 
Sub Assign(ByVal text As *Byte)
 
Sub Assign(ByVal text As *Byte, ByVal length As Long)
 
textの内容をこのStringインスタンスへコピーします。
 
* Stringを引数に取るものは、text.length文字コピーします。
 
* *Byte単独を引数に取るものは、lstrlen(text)文字コピーします。
 
* lengthを引数に取るものは、length文字分コピーします。
 
 
==== Swap ====
 
Sub Swap(ByRef x As String)
 
 
==== ZeroString ====
 
バッファとしてメモリを用意します。
 
Function ZeroString(allocLength As Long) As LPSTR
 
少なくともallocLength文字分の文字列を格納できるだけのメモリを用意します。文字列終端のナル文字があるため、少なくともallocLengthより1バイト多いメモリが確保されます。
 
; allocLength
 
: 確保したいメモリの量をバイト数単位で指定。
 
; 戻り値
 
: Charsを返します。
 
; Chars
 
: メモリ確保できた場合、そこへのポインタ。確保できなかった場合、NULL。
 
; Length
 
: メモリ確保できた場合allocLength。確保できなかった場合、0。
 
  
 
==== StrPtr ====
 
==== StrPtr ====
 
文字列へのポインタを返します。
 
文字列へのポインタを返します。
  Function StrPtr() As LPSTR
+
  Function StrPtr() As *StrChar
 
Charsを返します。
 
Charsを返します。
  
==== LPSTR変換演算子 ====
+
==== *StrChar変換演算子 ====
 
文字列へのポインタを得ます。
 
文字列へのポインタを得ます。
  Function Operator () As LPSTR
+
  Function Operator () As *StrChar
 
StrPtr()呼び出しと等価です。
 
StrPtr()呼び出しと等価です。
  
 
==== Insert ====
 
==== Insert ====
  Function Insert(startIndex As Long, lpszText As LPSTR) As Long
+
文字列を挿入します。
 +
  Const Function Insert(startIndex As Long, str As String) As String
 +
startIndex文字目の後にlpszTextの内容を挿入した文字列を生成して返します。
  
 
==== Remove ====
 
==== Remove ====
  Function Remove(startIndex As Long) As Long
+
文字列を削除します。
  Function Remove(startIndex As Long, count As Long) As Long
+
  Const Function Remove(startIndex As Long) As String
 
+
  Const Function Remove(startIndex As Long, count As Long) As LString
 +
*1番目の形式では、startIndexで指定した位置から文字列末尾までを削除した文字列を生成して返します。
 +
*2番目の形式では、startIndexで指定した位置からcountで指定した数の文字列を削除した文字列を生成して返します。
  
 
==== Replace ====
 
==== Replace ====
  Sub Replace(oldChar As Byte, newChar As Byte)
+
文字列の置換を行います。
  Sub Replace(ByRef oldStr As String, ByRef newStr As String)
+
  Const Function Replace(oldChar As StrChar, newChar As StrChar) As String
Sub Replace(oldStr As PCSTR, newStr As PCSTR)
+
  Const Function Replace(oldStr As String, newStr As String) As String
Sub Replace(oldStr As PCSTR, oldLen As Long, newStr As PCSTR, newLen As Long)
+
*1番目の形式では、このStringインスタンス内の文字oldCharをnewCharに置き換えた文字列を生成して返します。
 
+
*2番目の形式では、このStringインスタンス内の文字列oldStrをnewStrに置き換えた文字列を生成して返します。
==== Operator + ====
 
Function Operator+ (lpszText As LPSTR) As String
 
Function Operator+ (ByRef objString As String) As String
 
  
==== Operator & ====
+
===== 使用例 =====
  Function Operator& (lpszText As LPSTR) As String
+
Dim s = "でてこいでてこいいいけのこい"
  Function Operator& (ByRef objString As String) As String
+
  Print s.Replace("こい", "いけ")
 +
出力
 +
  でていけでていけいけのいけ
  
==== Append ====
+
==== 加算演算子・連結演算子 ====
  Sub Append(lpszText As LPSTR, textLength As Long)
+
文字列を連結します。
  Sub Append(text As LPSTR)
+
Const Function Operator + (str As PCSTR) As String
  Sub Append(ByRef str As String)
+
Const Function Operator + (str As PCWSTR) As String
 +
  Const Function Operator + (str As String) As String
 +
Const Function Operator & (text As PCSTR) As String
 +
  Const Function Operator & (text As PCWSTR) As String
 +
  Const Function Operator & (objString As String) As String
 +
このStringインスタンスとstrを連結した新しい文字列を返します。
 +
*1, 4番目の形式では、Concat(str, lstrlenA(str))と同じです
 +
*2, 5番目の形式では、Concat(str, lstrlenW(str))と同じです
 +
*3, 6番目の形式では、Concat(str, str.Length)と同じです。
  
==== Concat ====
+
==== 添え字演算子 ====
Function Concat(lpszText As LPSTR, textLength As Long) As String
 
 
 
==== Operator [] ====
 
 
要素を読み取ります。
 
要素を読み取ります。
  Function Operator[] (n As Long) As Byte
+
  Const Function Operator[] (n As Long) As StrChar
 
n文字目の文字を返します。範囲外の場合動作は保障されません。
 
n文字目の文字を返します。範囲外の場合動作は保障されません。
  
==== Operator []= ====
+
==== Contains ====
指定した要素に書き込みます。
+
指定した文字列を検索します。
  Sub Operator[]= (n As Long, c As Byte)
+
  Const Function Contains(text As String) As Boolean
n文字目に文字cを書き込みます。範囲外の場合動作は保障されません。
+
;text
 +
:検索する文字列を指定します。
 +
;戻り値
 +
:CharsからlpszTextの文字列が見つかった場合、Trueを返します。見つからなかった場合、Falseを返します。また、textが空の文字列だった場合、常にTrueが返ります。
  
 
==== IndexOf ====
 
==== IndexOf ====
  Function IndexOf(lpszText As LPSTR) As Long
+
指定した文字列が最初に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。
  Function IndexOf(lpszText As LPSTR, startIndex As Long) As Long
+
  Const Function IndexOf(text As String) As Long
  Function IndexOf(lpszText As LPSTR, startIndex As Long, count As Long) As Long
+
  Const Function IndexOf(text As String, startIndex As Long) As Long
 +
  Const Function IndexOf(text As String, startIndex As Long, count As Long) As Long
 +
;text
 +
:検索する文字列を指定します。
 +
;startIndex
 +
:検索を開始する位置を指定します。省略した場合、文字列の先頭から検索されます。
 +
;count
 +
:どこまでを検索するか、開始位置からの文字数で指定します。省略した場合、文字列の末尾まで検索されます。
 +
;戻り値
 +
:検索した文字列が見つかった場合、その位置が返ります。見つからなかった場合-1が返ります。また、lpszTextに空の文字を指定した場合、startIndexが返ります。
 +
文字列の位置は0から始まります。
  
 
==== LastIndexOf ====
 
==== LastIndexOf ====
  Function LastIndexOf(lpszText As LPSTR) As Long
+
指定した文字列が最後に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。
  Function LastIndexOf(lpszText As LPSTR, startIndex As Long) As Long
+
  Const Function LastIndexOf(text As String) As Long
  Function LastIndexOf(lpszText As LPSTR, startIndex As Long, count As Long) As Long
+
  Const Function LastIndexOf(text As String, startIndex As Long) As Long
 +
  Const Function LastIndexOf(text As String, startIndex As Long, count As Long) As Long
 +
;text
 +
:検索する文字列を指定します。
 +
;startIndex
 +
:検索を開始する位置を指定します。省略した場合、文字列の末尾から検索されます。
 +
;count
 +
:どこまでを検索するか、開始位置からの文字数で指定します。省略した場合、文字列の先頭まで検索されます。
 +
;戻り値
 +
:検索した文字列が見つかった場合、その位置が返ります。見つからなかった場合-1が返ります。また、lpszTextに空の文字を指定した場合、startIndexが返ります。
 +
文字列の位置は0から始まります。また、検索は開始位置から文字列の先頭に向かいます。
 +
 
  
 
==== StartsWith ====
 
==== StartsWith ====
  Function StartsWith(lpszText As LPSTR) As BOOL
+
先頭の文字列が、指定した文字列と一致しているか調べます。
 +
  Function StartsWith(text As String) As Boolean
 +
;text
 +
:一致するか調べる文字列を指定します。
 +
;戻り値
 +
:Charsの先頭がtextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。textに空の文字列を指定した場合、常にTrueが返ります。
  
 
==== EndsWith ====
 
==== EndsWith ====
  Function EndsWith(lpszText As LPSTR) As BOOL
+
末尾の文字列が、指定した文字列と一致しているか調べます
 +
  Const unction EndsWith(text As String) As Boolean
 +
;text
 +
:一致するか調べる文字列を指定します。
 +
;戻り値
 +
:Charsの末尾がtextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。textに空の文字列を指定した場合、常にTrueが返ります。
 +
 
 +
==== Substring ====
 +
指定した範囲の文字列を取得します。
 +
Const Function Substring(startIndex As Long) As String
 +
Const Function Substring(startIndex As Long, length As Long) As String
 +
;startIndex
 +
:開始位置を指定します。
 +
;length
 +
:取得する範囲を、文字列の長さでしていします。省略した場合、文字列の最後までになります。
 +
;戻り値
 +
:指定した範囲の文字列が、Stringオブジェクトで返ります。
 +
文字列の位置は0から始まります。
 +
 
 +
====ToLower====
 +
文字列を全て小文字に変換します。
 +
Const Function ToLower() As String
 +
;戻り値
 +
:Charsの文字列の全て小文字に変換した文字列。
 +
現在のところ変換の対象になるのはアルファベットのみです。
 +
 
 +
====ToUpper====
 +
文字列を全て大文字に変換します。
 +
Const Function ToUpper() As String
 +
;戻り値
 +
:Charsの文字列の全て大文字に変換した文字列。
 +
現在のところ変換の対象になるのはアルファベットのみです。
 +
 
 +
====GetHashCode====
 +
[[Objectクラス]]からのオーバーライドでハッシュ値を返します。
 +
Override Function GetHashCode() As Long
 +
;戻り値
 +
:ハッシュ値を返します。
 +
例え同一文字列でも、将来に渡ってこの値が同じである保障はありません。
 +
 
 +
====ToString====
 +
[[Objectクラス]]からのオーバーライドです。
 +
Override Function ToString() As String
 +
;戻り値
 +
:Thisを返します。
 +
 
 +
===公開静的メソッド===
 +
 
 +
====IsNullOrEmpty====
 +
文字列が空またはNULLかを調べます。
 +
Static Function IsNullOrEmpty(s As String) As Boolean
 +
;戻り値
 +
:sがNothingであるかs.Lengthが0ならばTrueが返ります。それ以外はFalseです。
 +
 
 +
====Compare====
 +
文字列を比較します。
 +
Static Function Concat(x As String, y As String) As Long
 +
;x
 +
:左辺
 +
;y
 +
:右辺
 +
;戻り値
 +
:x < yなら負の値。x = yなら0。x > yなら正の値。
 +
x < y, x = y, x > yのとき、それぞれString.Compare(x, y) < 0, String.Compare(x, y) = 0, String.Compare(x, y) > 0と書き表せます。なお、比較演算子の利用も考えてください。
 +
 
 +
====Concat====
 +
文字列を連結して新しい文字列を作ります。
 +
Staic Function Concat(x As Object) As String
 +
Staic Function Concat(x As String, y As String) As String
 +
Staic Function Concat(x As Object, y As Object) As String
 +
Staic Function Concat(x As String, y As String, z As String) As String
 +
Staic Function Concat(x As Object, y As Object, z As Object) As String
 +
Staic Function Concat(x As String, y As String, z As String, w As String) As String
 +
Staic Function Concat(x As Object, y As Object, z As Object, w As Object) As String
 +
;x
 +
:1つ目の文字列
 +
;y
 +
:2つ目の文字列
 +
;z
 +
:3つ目の文字列
 +
;w
 +
:4つ目の文字列
 +
;戻り値
 +
:連結した文字列を返します。
 +
Objectを引数に取るものは、ToStringして得た文字列を連結の対象とします。
 +
 
 +
===公開プロパティ===
 +
====Length====
 +
Function Length() As Long
 +
Stringが保持している文字列の長さを表しています。基本的に書き換えないでください。
 +
 
 +
== 備考 ==
 +
文字列の末尾には、従来のABの文字列やC/C++などと同様、常にヌル文字 (\0)が付きます。Length > 0のとき、StrPtr[Length]は0です。StrPtrを行って得たポインタからこの要素を読み取ることは可能です。なお、文字列中にヌル文字が含まれても構いません。
  
==== SubString ====
+
=== StrChar型 ===
Function SubString(startIndex As Long) As String
+
StringはStrChar型の配列として文字を保持します。StrChar型は場合によってマルチバイト文字 (日本語環境のWindowsではShift_JIS)かワイド文字 (UTF-16LE)のどちらかに切り替わります。
Function SubString(startIndex As Long, length As Long) As String
+
; UNICODEが定義されている(プロジェクトオプションで指定されている)場合
 +
: 常にワイド文字になります。
 +
; UNICODEが定義されておらず、__STRING_IS_NOT_ALWAYS_UNICODEも定義されていない場合
 +
: ワイド文字になります。このとき__STRING_UNICODE_WINDOWS_ANSIが定義されます。
 +
; UNICODEが定義されておらず__STRING_IS_NOT_ALWAYS_UNICODEが定義されている場合
 +
: マルチバイト文字になります。このとき__STRING_IS_NOT_UNICODEが定義されます。
 +
__STRING_UNICODE_WINDOWS_ANSIが定義されている状態では、Char/TCHARとStrCharは異なる大きさになることに注意してください。
  
==== IsNullOrEmpty ====
+
[[Category:System名前空間]]
Function IsNullOrEmpty() As BOOL
 

2009年11月9日 (月) 09:33時点における最新版

文字列を扱うクラスです。

クラスの機能

公開メソッド

コンストラクタ

Stringインスタンスを初期化します。

Sub String()

(デフォルトコンストラクタ)空文字列を作ります。

Sub String(initStr As PCWSTR, length As Long)
Sub String(initStr As PCSTR, length As Long)

initStrで示される内容で文字列を作ります。長さはlengthで指定します。

Sub String(initStr As PCWSTR)
Sub String(initStr As PCSTR)

initStrで示される内容で文字列を作ります。ヌル文字で終端しているとして扱われます。

Sub String(initStr As String)

initStrの複製を作ります。

Sub String(initChar As StrChar, length As Long)

initCharがlengthの数だけ並んだ文字列を作成します。

デストラクタ

Stringインスタンスの破壊時に呼ばれます。

Sub ~String()

StrPtr

文字列へのポインタを返します。

Function StrPtr() As *StrChar

Charsを返します。

*StrChar変換演算子

文字列へのポインタを得ます。

Function Operator () As *StrChar

StrPtr()呼び出しと等価です。

Insert

文字列を挿入します。

Const Function Insert(startIndex As Long, str As String) As String

startIndex文字目の後にlpszTextの内容を挿入した文字列を生成して返します。

Remove

文字列を削除します。

Const Function Remove(startIndex As Long) As String
Const Function Remove(startIndex As Long, count As Long) As LString
  • 1番目の形式では、startIndexで指定した位置から文字列末尾までを削除した文字列を生成して返します。
  • 2番目の形式では、startIndexで指定した位置からcountで指定した数の文字列を削除した文字列を生成して返します。

Replace

文字列の置換を行います。

Const Function Replace(oldChar As StrChar, newChar As StrChar) As String
Const Function Replace(oldStr As String, newStr As String) As String
  • 1番目の形式では、このStringインスタンス内の文字oldCharをnewCharに置き換えた文字列を生成して返します。
  • 2番目の形式では、このStringインスタンス内の文字列oldStrをnewStrに置き換えた文字列を生成して返します。
使用例
Dim s = "でてこいでてこいいいけのこい"
Print s.Replace("こい", "いけ")

出力

でていけでていけいけのいけ

加算演算子・連結演算子

文字列を連結します。

Const Function Operator + (str As PCSTR) As String
Const Function Operator + (str As PCWSTR) As String
Const Function Operator + (str As String) As String
Const Function Operator & (text As PCSTR) As String
Const Function Operator & (text As PCWSTR) As String
Const Function Operator & (objString As String) As String

このStringインスタンスとstrを連結した新しい文字列を返します。

  • 1, 4番目の形式では、Concat(str, lstrlenA(str))と同じです
  • 2, 5番目の形式では、Concat(str, lstrlenW(str))と同じです
  • 3, 6番目の形式では、Concat(str, str.Length)と同じです。

添え字演算子

要素を読み取ります。

Const Function Operator[] (n As Long) As StrChar

n文字目の文字を返します。範囲外の場合動作は保障されません。

Contains

指定した文字列を検索します。

Const Function Contains(text As String) As Boolean
text
検索する文字列を指定します。
戻り値
CharsからlpszTextの文字列が見つかった場合、Trueを返します。見つからなかった場合、Falseを返します。また、textが空の文字列だった場合、常にTrueが返ります。

IndexOf

指定した文字列が最初に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。

Const Function IndexOf(text As String) As Long
Const Function IndexOf(text As String, startIndex As Long) As Long
Const Function IndexOf(text As String, startIndex As Long, count As Long) As Long
text
検索する文字列を指定します。
startIndex
検索を開始する位置を指定します。省略した場合、文字列の先頭から検索されます。
count
どこまでを検索するか、開始位置からの文字数で指定します。省略した場合、文字列の末尾まで検索されます。
戻り値
検索した文字列が見つかった場合、その位置が返ります。見つからなかった場合-1が返ります。また、lpszTextに空の文字を指定した場合、startIndexが返ります。

文字列の位置は0から始まります。

LastIndexOf

指定した文字列が最後に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。

Const Function LastIndexOf(text As String) As Long
Const Function LastIndexOf(text As String, startIndex As Long) As Long
Const Function LastIndexOf(text As String, startIndex As Long, count As Long) As Long
text
検索する文字列を指定します。
startIndex
検索を開始する位置を指定します。省略した場合、文字列の末尾から検索されます。
count
どこまでを検索するか、開始位置からの文字数で指定します。省略した場合、文字列の先頭まで検索されます。
戻り値
検索した文字列が見つかった場合、その位置が返ります。見つからなかった場合-1が返ります。また、lpszTextに空の文字を指定した場合、startIndexが返ります。

文字列の位置は0から始まります。また、検索は開始位置から文字列の先頭に向かいます。


StartsWith

先頭の文字列が、指定した文字列と一致しているか調べます。

Function StartsWith(text As String) As Boolean
text
一致するか調べる文字列を指定します。
戻り値
Charsの先頭がtextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。textに空の文字列を指定した場合、常にTrueが返ります。

EndsWith

末尾の文字列が、指定した文字列と一致しているか調べます

Const unction EndsWith(text As String) As Boolean
text
一致するか調べる文字列を指定します。
戻り値
Charsの末尾がtextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。textに空の文字列を指定した場合、常にTrueが返ります。

Substring

指定した範囲の文字列を取得します。

Const Function Substring(startIndex As Long) As String
Const Function Substring(startIndex As Long, length As Long) As String
startIndex
開始位置を指定します。
length
取得する範囲を、文字列の長さでしていします。省略した場合、文字列の最後までになります。
戻り値
指定した範囲の文字列が、Stringオブジェクトで返ります。

文字列の位置は0から始まります。

ToLower

文字列を全て小文字に変換します。

Const Function ToLower() As String
戻り値
Charsの文字列の全て小文字に変換した文字列。

現在のところ変換の対象になるのはアルファベットのみです。

ToUpper

文字列を全て大文字に変換します。

Const Function ToUpper() As String
戻り値
Charsの文字列の全て大文字に変換した文字列。

現在のところ変換の対象になるのはアルファベットのみです。

GetHashCode

Objectクラスからのオーバーライドでハッシュ値を返します。

Override Function GetHashCode() As Long
戻り値
ハッシュ値を返します。

例え同一文字列でも、将来に渡ってこの値が同じである保障はありません。

ToString

Objectクラスからのオーバーライドです。

Override Function ToString() As String
戻り値
Thisを返します。

公開静的メソッド

IsNullOrEmpty

文字列が空またはNULLかを調べます。

Static Function IsNullOrEmpty(s As String) As Boolean
戻り値
sがNothingであるかs.Lengthが0ならばTrueが返ります。それ以外はFalseです。

Compare

文字列を比較します。

Static Function Concat(x As String, y As String) As Long
x
左辺
y
右辺
戻り値
x < yなら負の値。x = yなら0。x > yなら正の値。

x < y, x = y, x > yのとき、それぞれString.Compare(x, y) < 0, String.Compare(x, y) = 0, String.Compare(x, y) > 0と書き表せます。なお、比較演算子の利用も考えてください。

Concat

文字列を連結して新しい文字列を作ります。

Staic Function Concat(x As Object) As String
Staic Function Concat(x As String, y As String) As String
Staic Function Concat(x As Object, y As Object) As String
Staic Function Concat(x As String, y As String, z As String) As String
Staic Function Concat(x As Object, y As Object, z As Object) As String
Staic Function Concat(x As String, y As String, z As String, w As String) As String
Staic Function Concat(x As Object, y As Object, z As Object, w As Object) As String
x
1つ目の文字列
y
2つ目の文字列
z
3つ目の文字列
w
4つ目の文字列
戻り値
連結した文字列を返します。

Objectを引数に取るものは、ToStringして得た文字列を連結の対象とします。

公開プロパティ

Length

Function Length() As Long

Stringが保持している文字列の長さを表しています。基本的に書き換えないでください。

備考

文字列の末尾には、従来のABの文字列やC/C++などと同様、常にヌル文字 (\0)が付きます。Length > 0のとき、StrPtr[Length]は0です。StrPtrを行って得たポインタからこの要素を読み取ることは可能です。なお、文字列中にヌル文字が含まれても構いません。

StrChar型

StringはStrChar型の配列として文字を保持します。StrChar型は場合によってマルチバイト文字 (日本語環境のWindowsではShift_JIS)かワイド文字 (UTF-16LE)のどちらかに切り替わります。

UNICODEが定義されている(プロジェクトオプションで指定されている)場合
常にワイド文字になります。
UNICODEが定義されておらず、__STRING_IS_NOT_ALWAYS_UNICODEも定義されていない場合
ワイド文字になります。このとき__STRING_UNICODE_WINDOWS_ANSIが定義されます。
UNICODEが定義されておらず__STRING_IS_NOT_ALWAYS_UNICODEが定義されている場合
マルチバイト文字になります。このとき__STRING_IS_NOT_UNICODEが定義されます。

__STRING_UNICODE_WINDOWS_ANSIが定義されている状態では、Char/TCHARとStrCharは異なる大きさになることに注意してください。