「Stringクラス」の版間の差分
(リビジョン132対応:) |
|||
6行目: | 6行目: | ||
==== Chars ==== | ==== Chars ==== | ||
− | Chars As * | + | Chars As *Char |
Stringが保持している文字列へのポインタです。これを通じて内容の読み取り・書き込みを行うことができます。 | Stringが保持している文字列へのポインタです。これを通じて内容の読み取り・書き込みを行うことができます。 | ||
21行目: | 21行目: | ||
Sub String() | Sub String() | ||
デフォルトコンストラクタ)空文字列を作ります。 | デフォルトコンストラクタ)空文字列を作ります。 | ||
+ | |||
Sub String(ByRef initStr As String) | Sub String(ByRef initStr As String) | ||
− | + | コピーコンストラクタです。Assign(initStr)を行います。 | |
− | |||
− | Sub String(ByVal initStr As * | + | Sub String(ByVal initStr As *Char) |
Assign(initStr)を行います。 | Assign(initStr)を行います。 | ||
− | Sub String(ByVal initStr As * | + | Sub String(ByVal initStr As *Char, length As Long) |
Assign(initStr, length)を行います。 | Assign(initStr, length)を行います。 | ||
Sub String(length As Long) | Sub String(length As Long) | ||
− | String(length, | + | String(length, 0)と等価です。 |
− | Sub String(length As Long, ByVal initChar As | + | Sub String(length As Long, ByVal initChar As Char) |
ReSize(length, initChar)を行います。 | ReSize(length, initChar)を行います。 | ||
47行目: | 47行目: | ||
Stringオブジェクトに文字列を割り当てます。 | Stringオブジェクトに文字列を割り当てます。 | ||
Sub Operator = (ByRef text As String) | Sub Operator = (ByRef text As String) | ||
− | Sub Operator = (ByVal text As * | + | Sub Operator = (ByVal text As *Char) |
Assign(text)と同じです。 | Assign(text)と同じです。 | ||
54行目: | 54行目: | ||
Stringオブジェクトに文字列を割り当てます。 | Stringオブジェクトに文字列を割り当てます。 | ||
Sub Assign(ByRef text As String) | Sub Assign(ByRef text As String) | ||
− | Sub Assign(ByVal text As * | + | Sub Assign(ByVal text As *Char) |
− | Sub Assign(ByVal text As * | + | Sub Assign(ByVal text As *Char, ByVal length As Long) |
textの内容をこのStringインスタンスへコピーします。 | textの内容をこのStringインスタンスへコピーします。 | ||
* Stringを引数に取るものは、text.length文字コピーします。 | * Stringを引数に取るものは、text.length文字コピーします。 | ||
− | * * | + | * *Char単独を引数に取るものは、lstrlen(text)文字コピーします。 |
* lengthを引数に取るものは、length文字分コピーします。 | * lengthを引数に取るものは、length文字分コピーします。 | ||
71行目: | 71行目: | ||
文字列の大きさを変更します。 | 文字列の大きさを変更します。 | ||
Sub ReSize(length As Long) | Sub ReSize(length As Long) | ||
− | Sub | + | Sub ReSize(length As Long, c As Char) |
1番目の形式はReSize(length, 0)と等価です。文字列の長さをlengthにします。変更後の文字列の長さが変更前より長くなるときには、増えた要素の部分をcで初期化します。 | 1番目の形式はReSize(length, 0)と等価です。文字列の長さをlengthにします。変更後の文字列の長さが変更前より長くなるときには、増えた要素の部分をcで初期化します。 | ||
77行目: | 77行目: | ||
==== StrPtr ==== | ==== StrPtr ==== | ||
文字列へのポインタを返します。 | 文字列へのポインタを返します。 | ||
− | Function StrPtr() As | + | Function StrPtr() As *Char |
Charsを返します。 | Charsを返します。 | ||
− | ==== | + | ==== *Char変換演算子 ==== |
文字列へのポインタを得ます。 | 文字列へのポインタを得ます。 | ||
− | Function Operator () As | + | Function Operator () As *Char |
StrPtr()呼び出しと等価です。 | StrPtr()呼び出しと等価です。 | ||
89行目: | 89行目: | ||
==== Insert ==== | ==== Insert ==== | ||
文字列を挿入します。 | 文字列を挿入します。 | ||
− | Function Insert(startIndex As Long, ByRef str As String) As | + | Const Function Insert(startIndex As Long, ByRef str As String) As String |
− | Function Insert(startIndex As Long, str As | + | Const Function Insert(startIndex As Long, str As *Char) As String |
− | Function Insert(startIndex As Long, str As | + | Const Function Insert(startIndex As Long, str As *Char, length As Long) As String |
− | + | startIndex文字目の後にlpszTextの内容を挿入した文字列を生成して返します。挿入される文字列の長さは次のようにしてなります。 | |
* 1番目の形式ではstr.Length | * 1番目の形式ではstr.Length | ||
* 2番目の形式ではlstrlen(str) | * 2番目の形式ではlstrlen(str) | ||
100行目: | 100行目: | ||
==== Remove ==== | ==== Remove ==== | ||
文字列を削除します。 | 文字列を削除します。 | ||
− | Function Remove(startIndex As Long) As | + | Const Function Remove(startIndex As Long) As String |
− | Function Remove(startIndex As Long, count As Long) As | + | Const Function Remove(startIndex As Long, count As Long) As LString |
− | + | *1番目の形式では、startIndexで指定した位置から文字列末尾までを削除した文字列を生成して返します。 | |
− | + | *2番目の形式では、startIndexで指定した位置からcountで指定した数の文字列を削除した文字列を生成して返します。 | |
==== Replace ==== | ==== Replace ==== | ||
文字列の置換を行います。 | 文字列の置換を行います。 | ||
− | + | Const Function Replace(oldChar As Char, newChar As Char) As String | |
− | + | Const Function Replace(ByRef oldStr As String, ByRef newStr As String) As String | |
− | + | Const Function Replace(oldStr As *Char, newStr As *Char) As String | |
− | + | Const Function Replace(oldStr As *Char, oldLen As Long, newStr As *Char, newLen As Long) As String | |
− | + | * 1番目の形式では、このStringインスタンス内の文字oldCharをnewCharに置き換えた文字列を生成して返します。 | |
− | 2- | + | * 2-4番目の形式では、このStringインスタンス内の文字列oldStrをnewStrに置き換えた文字列を生成して返します。oldStr/newStrの長さは、次のように決まります。 |
− | * 2番目の形式では、oldStr.Length/newStr.Length。 | + | ** 2番目の形式では、oldStr.Length/newStr.Length。 |
− | * 3番目の形式では、lstrlen(oldStr)/newStr(oldStr)。 | + | ** 3番目の形式では、lstrlen(oldStr)/newStr(oldStr)。 |
− | * 4番目の形式では、oldLen/newLen。 | + | ** 4番目の形式では、oldLen/newLen。 |
==== Operator + ==== | ==== Operator + ==== | ||
文字列を連結します。 | 文字列を連結します。 | ||
− | Function Operator+ (str As | + | Const Function Operator + (str As *Char) As String |
− | Function Operator+ (ByRef str As String) As String | + | Const Function Operator + (ByRef str As String) As String |
このStringインスタンスとstrを連結した新しい文字列を返します。 | このStringインスタンスとstrを連結した新しい文字列を返します。 | ||
* 1番目の形式では、Concat(str, lstrlen(str))と同じです。 | * 1番目の形式では、Concat(str, lstrlen(str))と同じです。 | ||
130行目: | 130行目: | ||
==== Operator & ==== | ==== Operator & ==== | ||
文字列を連結します。 | 文字列を連結します。 | ||
− | Function Operator& (str As | + | Const Function Operator & (str As *Char) As String |
− | Function Operator& (ByRef str As String) As String | + | Const Function Operator & (ByRef str As String) As String |
このStringインスタンスとstrを連結した新しい文字列を返します。 | このStringインスタンスとstrを連結した新しい文字列を返します。 | ||
* 1番目の形式では、Concat(str, lstrlen(str))と同じです。 | * 1番目の形式では、Concat(str, lstrlen(str))と同じです。 | ||
138行目: | 138行目: | ||
==== Append ==== | ==== Append ==== | ||
− | Sub Append( | + | Sub Append(text As *Char, textLength As Long) |
− | Sub Append(text As | + | Sub Append(text As *Char) |
Sub Append(ByRef str As String) | Sub Append(ByRef str As String) | ||
− | + | 末尾に文字列を追加します | |
==== Concat ==== | ==== Concat ==== | ||
この文字列と連結した新しい文字列を作ります。 | この文字列と連結した新しい文字列を作ります。 | ||
− | Function Concat(str As | + | Const Function Concat(str As *Char, length As Long) As String |
; str : この文字列と連結する文字列へのポインタを指定します。末尾にヌル文字が存在する必要はありません。 | ; str : この文字列と連結する文字列へのポインタを指定します。末尾にヌル文字が存在する必要はありません。 | ||
; length : strが指す文字列の長さを指定します。 | ; length : strが指す文字列の長さを指定します。 | ||
151行目: | 151行目: | ||
このStringインスタンス自身の内容が変更されることはありません。 | このStringインスタンス自身の内容が変更されることはありません。 | ||
+ | ===== 使用例 ===== | ||
+ | Dim s = "でてこいでてこいいいけのこい" | ||
+ | Print s.Replace("こい", "いけ") | ||
+ | 出力 | ||
+ | でていけでていけいけのいけ | ||
==== Operator [] ==== | ==== Operator [] ==== | ||
要素を読み取ります。 | 要素を読み取ります。 | ||
− | Function Operator[] (n As Long) As | + | Const Function Operator[] (n As Long) As Char |
n文字目の文字を返します。範囲外の場合動作は保障されません。 | n文字目の文字を返します。範囲外の場合動作は保障されません。 | ||
160行目: | 165行目: | ||
==== Operator []= ==== | ==== Operator []= ==== | ||
指定した要素に書き込みます。 | 指定した要素に書き込みます。 | ||
− | Sub Operator[]= (n As Long, c As | + | Sub Operator[]= (n As Long, c As Char) |
n文字目に文字cを書き込みます。範囲外の場合動作は保障されません。 | n文字目に文字cを書き込みます。範囲外の場合動作は保障されません。 | ||
166行目: | 171行目: | ||
==== Contains ==== | ==== Contains ==== | ||
指定した文字列を検索します。 | 指定した文字列を検索します。 | ||
− | Function Contains( | + | Const Function Contains(text As *Char) As Boolean |
− | ; | + | ;text |
:検索する文字列を指定します。 | :検索する文字列を指定します。 | ||
;戻り値 | ;戻り値 | ||
− | : | + | :CharsからlpszTextの文字列が見つかった場合、Trueを返します。見つからなかった場合、Falseを返します。また、textが空の文字列だった場合、常にTrueが返ります。 |
==== IndexOf ==== | ==== IndexOf ==== | ||
指定した文字列が最初に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。 | 指定した文字列が最初に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。 | ||
− | Function IndexOf(lpszText As | + | Const Function IndexOf(lpszText As *Char) As Long |
− | Function IndexOf(lpszText As | + | Const Function IndexOf(lpszText As *Char, startIndex As Long) As Long |
− | Function IndexOf(lpszText As | + | Const Function IndexOf(lpszText As *Char, startIndex As Long, count As Long) As Long |
;lpszText | ;lpszText | ||
:検索する文字列を指定します。 | :検索する文字列を指定します。 | ||
191行目: | 196行目: | ||
==== LastIndexOf ==== | ==== LastIndexOf ==== | ||
指定した文字列が最後に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。 | 指定した文字列が最後に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。 | ||
− | Function LastIndexOf(lpszText As | + | Const Function LastIndexOf(lpszText As *Char) As Long |
− | Function LastIndexOf(lpszText As | + | Const Function LastIndexOf(lpszText As *Char, startIndex As Long) As Long |
− | Function LastIndexOf(lpszText As | + | Const Function LastIndexOf(lpszText As *Char, startIndex As Long, count As Long) As Long |
;lpszText | ;lpszText | ||
:検索する文字列を指定します。 | :検索する文字列を指定します。 | ||
207行目: | 212行目: | ||
==== StartsWith ==== | ==== StartsWith ==== | ||
先頭の文字列が、指定した文字列と一致しているか調べます。 | 先頭の文字列が、指定した文字列と一致しているか調べます。 | ||
− | Function StartsWith(lpszText As | + | Function StartsWith(lpszText As *Char) As Boolean |
;lpszText | ;lpszText | ||
:一致するか調べる文字列を指定します。 | :一致するか調べる文字列を指定します。 | ||
;戻り値 | ;戻り値 | ||
− | : | + | :Charsの先頭がlpszTextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。lpszTextに空の文字列を指定した場合、常にTrueが返ります。 |
==== EndsWith ==== | ==== EndsWith ==== | ||
末尾の文字列が、指定した文字列と一致しているか調べます | 末尾の文字列が、指定した文字列と一致しているか調べます | ||
− | + | Const unction EndsWith(lpszText As *Char) As Boolean | |
;lpszText | ;lpszText | ||
:一致するか調べる文字列を指定します。 | :一致するか調べる文字列を指定します。 | ||
;戻り値 | ;戻り値 | ||
− | : | + | :Charsの末尾がlpszTextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。lpszTextに空の文字列を指定した場合、常にTrueが返ります。 |
==== SubString ==== | ==== SubString ==== | ||
指定した範囲の文字列を取得します。 | 指定した範囲の文字列を取得します。 | ||
− | Function SubString(startIndex As Long) As String | + | Const Function SubString(startIndex As Long) As String |
− | Function SubString(startIndex As Long, length As Long) As String | + | Const Function SubString(startIndex As Long, length As Long) As String |
;startIndex | ;startIndex | ||
:開始位置を指定します。 | :開始位置を指定します。 | ||
250行目: | 255行目: | ||
==== IsNullOrEmpty ==== | ==== IsNullOrEmpty ==== | ||
文字列が空またはNULLかを調べます。 | 文字列が空またはNULLかを調べます。 | ||
− | Function IsNullOrEmpty() As | + | Static Function IsNullOrEmpty(s As String) As Boolean |
;戻り値 | ;戻り値 | ||
− | : | + | :sがNothingであるかs.Lengthが0ならばTrueが返ります。それ以外はFalseです。 |
− | == | + | == 備考 == |
文字列の末尾には、従来のABの文字列やC/C++などと同様、常にヌル文字(Asc(Ex"\0")あるいは単に0)が付きます。Length > 0のとき、Chars[Length]は0です。この要素を読み取ることはできますが、書き込むことはできません。(範囲外としてエラーとなります)なお、文字列中にヌル文字が含まれても構いません。 | 文字列の末尾には、従来のABの文字列やC/C++などと同様、常にヌル文字(Asc(Ex"\0")あるいは単に0)が付きます。Length > 0のとき、Chars[Length]は0です。この要素を読み取ることはできますが、書き込むことはできません。(範囲外としてエラーとなります)なお、文字列中にヌル文字が含まれても構いません。 | ||
※範囲外のエラーは未実装です。 | ※範囲外のエラーは未実装です。 |
2007年3月4日 (日) 14:38時点における版
文字列を扱うクラスです。
クラスの機能
メンバ・プロパティ
Chars
Chars As *Char
Stringが保持している文字列へのポインタです。これを通じて内容の読み取り・書き込みを行うことができます。
Length
Length As Long
Stringが保持している文字列の長さを表しています。基本的に書き換えないでください。
メソッド
コンストラクタ
Stringインスタンスを初期化します。
Sub String()
デフォルトコンストラクタ)空文字列を作ります。
Sub String(ByRef initStr As String)
コピーコンストラクタです。Assign(initStr)を行います。
Sub String(ByVal initStr As *Char)
Assign(initStr)を行います。
Sub String(ByVal initStr As *Char, length As Long)
Assign(initStr, length)を行います。
Sub String(length As Long)
String(length, 0)と等価です。
Sub String(length As Long, ByVal initChar As Char)
ReSize(length, initChar)を行います。
デストラクタ
Stringインスタンスの破壊時に呼ばれます。
Sub ~String()
文字列のメモリを解放します。
代入
Stringオブジェクトに文字列を割り当てます。
Sub Operator = (ByRef text As String) Sub Operator = (ByVal text As *Char)
Assign(text)と同じです。
Assign
Stringオブジェクトに文字列を割り当てます。
Sub Assign(ByRef text As String) Sub Assign(ByVal text As *Char) Sub Assign(ByVal text As *Char, ByVal length As Long)
textの内容をこのStringインスタンスへコピーします。
- Stringを引数に取るものは、text.length文字コピーします。
- *Char単独を引数に取るものは、lstrlen(text)文字コピーします。
- lengthを引数に取るものは、length文字分コピーします。
Swap
文字列の内容を交換します。
Sub Swap(ByRef x As String)
- x
- 交換先のインスタンスを指定します。
ReSize
文字列の大きさを変更します。
Sub ReSize(length As Long) Sub ReSize(length As Long, c As Char)
1番目の形式はReSize(length, 0)と等価です。文字列の長さをlengthにします。変更後の文字列の長さが変更前より長くなるときには、増えた要素の部分をcで初期化します。
StrPtr
文字列へのポインタを返します。
Function StrPtr() As *Char
Charsを返します。
*Char変換演算子
文字列へのポインタを得ます。
Function Operator () As *Char
StrPtr()呼び出しと等価です。
Insert
文字列を挿入します。
Const Function Insert(startIndex As Long, ByRef str As String) As String Const Function Insert(startIndex As Long, str As *Char) As String Const Function Insert(startIndex As Long, str As *Char, length As Long) As String
startIndex文字目の後にlpszTextの内容を挿入した文字列を生成して返します。挿入される文字列の長さは次のようにしてなります。
- 1番目の形式ではstr.Length
- 2番目の形式ではlstrlen(str)
- 3番目の形式ではlength
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 Char, newChar As Char) As String Const Function Replace(ByRef oldStr As String, ByRef newStr As String) As String Const Function Replace(oldStr As *Char, newStr As *Char) As String Const Function Replace(oldStr As *Char, oldLen As Long, newStr As *Char, newLen As Long) As String
- 1番目の形式では、このStringインスタンス内の文字oldCharをnewCharに置き換えた文字列を生成して返します。
- 2-4番目の形式では、このStringインスタンス内の文字列oldStrをnewStrに置き換えた文字列を生成して返します。oldStr/newStrの長さは、次のように決まります。
- 2番目の形式では、oldStr.Length/newStr.Length。
- 3番目の形式では、lstrlen(oldStr)/newStr(oldStr)。
- 4番目の形式では、oldLen/newLen。
Operator +
文字列を連結します。
Const Function Operator + (str As *Char) As String Const Function Operator + (ByRef str As String) As String
このStringインスタンスとstrを連結した新しい文字列を返します。
- 1番目の形式では、Concat(str, lstrlen(str))と同じです。
- 2番目の形式では、Concat(str, str.Length)と同じです。
Operator &
文字列を連結します。
Const Function Operator & (str As *Char) As String Const Function Operator & (ByRef str As String) As String
このStringインスタンスとstrを連結した新しい文字列を返します。
- 1番目の形式では、Concat(str, lstrlen(str))と同じです。
- 2番目の形式では、Concat(str, str.Length)と同じです。
Append
Sub Append(text As *Char, textLength As Long) Sub Append(text As *Char) Sub Append(ByRef str As String)
末尾に文字列を追加します
Concat
この文字列と連結した新しい文字列を作ります。
Const Function Concat(str As *Char, length As Long) As String
- str
- この文字列と連結する文字列へのポインタを指定します。末尾にヌル文字が存在する必要はありません。
- length
- strが指す文字列の長さを指定します。
- 戻り値
- 連結した文字列を返します。
このStringインスタンス自身の内容が変更されることはありません。
使用例
Dim s = "でてこいでてこいいいけのこい" Print s.Replace("こい", "いけ")
出力
でていけでていけいけのいけ
Operator []
要素を読み取ります。
Const Function Operator[] (n As Long) As Char
n文字目の文字を返します。範囲外の場合動作は保障されません。
Operator []=
指定した要素に書き込みます。
Sub Operator[]= (n As Long, c As Char)
n文字目に文字cを書き込みます。範囲外の場合動作は保障されません。
Contains
指定した文字列を検索します。
Const Function Contains(text As *Char) As Boolean
- text
- 検索する文字列を指定します。
- 戻り値
- CharsからlpszTextの文字列が見つかった場合、Trueを返します。見つからなかった場合、Falseを返します。また、textが空の文字列だった場合、常にTrueが返ります。
IndexOf
指定した文字列が最初に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。
Const Function IndexOf(lpszText As *Char) As Long Const Function IndexOf(lpszText As *Char, startIndex As Long) As Long Const Function IndexOf(lpszText As *Char, startIndex As Long, count As Long) As Long
- lpszText
- 検索する文字列を指定します。
- startIndex
- 検索を開始する位置を指定します。省略した場合、文字列の先頭から検索されます。
- count
- どこまでを検索するか、開始位置からの文字数で指定します。省略した場合、文字列の末尾まで検索されます。
- 戻り値
- 検索した文字列が見つかった場合、その位置が返ります。見つからなかった場合-1が返ります。また、lpszTextに空の文字を指定した場合、startIndexが返ります。
文字列の位置は0から始まります。
LastIndexOf
指定した文字列が最後に見つかった位置を返します。検索は、指定した位置から指定した文字数までとなります。
Const Function LastIndexOf(lpszText As *Char) As Long Const Function LastIndexOf(lpszText As *Char, startIndex As Long) As Long Const Function LastIndexOf(lpszText As *Char, startIndex As Long, count As Long) As Long
- lpszText
- 検索する文字列を指定します。
- startIndex
- 検索を開始する位置を指定します。省略した場合、文字列の末尾から検索されます。
- count
- どこまでを検索するか、開始位置からの文字数で指定します。省略した場合、文字列の先頭まで検索されます。
- 戻り値
- 検索した文字列が見つかった場合、その位置が返ります。見つからなかった場合-1が返ります。また、lpszTextに空の文字を指定した場合、startIndexが返ります。
文字列の位置は0から始まります。また、検索は開始位置から文字列の先頭に向かいます。
StartsWith
先頭の文字列が、指定した文字列と一致しているか調べます。
Function StartsWith(lpszText As *Char) As Boolean
- lpszText
- 一致するか調べる文字列を指定します。
- 戻り値
- Charsの先頭がlpszTextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。lpszTextに空の文字列を指定した場合、常にTrueが返ります。
EndsWith
末尾の文字列が、指定した文字列と一致しているか調べます
Const unction EndsWith(lpszText As *Char) As Boolean
- lpszText
- 一致するか調べる文字列を指定します。
- 戻り値
- Charsの末尾がlpszTextと一致している場合、Trueが返ります。一致していない場合、Falseが返ります。lpszTextに空の文字列を指定した場合、常にTrueが返ります。
SubString
指定した範囲の文字列を取得します。
Const Function SubString(startIndex As Long) As String Const Function SubString(startIndex As Long, length As Long) As String
- startIndex
- 開始位置を指定します。
- length
- 取得する範囲を、文字列の長さでしていします。省略した場合、文字列の最後までになります。
- 戻り値
- Charsの指定した範囲の文字列が、Stringオブジェクトで返ります。
文字列の位置は0から始まります。
ToLower
文字列を全て小文字に変換します。
Sub ToLower()
Charsの文字列が全て小文字に変換されます。
ToUpper
文字列を全て大文字に変換します。
Sub ToUpper()
Charsの文字列が全て大文字に変換されます。
IsNullOrEmpty
文字列が空またはNULLかを調べます。
Static Function IsNullOrEmpty(s As String) As Boolean
- 戻り値
- sがNothingであるかs.Lengthが0ならばTrueが返ります。それ以外はFalseです。
備考
文字列の末尾には、従来のABの文字列やC/C++などと同様、常にヌル文字(Asc(Ex"\0")あるいは単に0)が付きます。Length > 0のとき、Chars[Length]は0です。この要素を読み取ることはできますが、書き込むことはできません。(範囲外としてエラーとなります)なお、文字列中にヌル文字が含まれても構いません。
※範囲外のエラーは未実装です。