StringSetLength関数の働き・役割
StringSetLength関数は、指定された文字列の長さを設定するために使用されます。この関数は、エキスパートアドバイザーやスクリプト内で文字列を操作する際に便利です。特に、文字列の長さを動的に変更する場合に役立ちます。
StringSetLength関数の引数について
StringSetLength関数は、以下の2つの引数を取ります:
・string& string_var
: 長さを変更したい文字列。この引数は参照渡しです。
※参照渡しについては↓の記事をご参照ください。
・uint new_length
: 設定する新しい文字列の長さ(文字数)。
StringSetLength関数の戻り値について
StringSetLength関数は、成功した場合にはtrueを返し、失敗した場合にはfalseを返します。エラーコードを取得するためには、GetLastError関数を使用します。
※GetLastError関数についての詳細は↓の記事をご参照ください
StringSetLength関数を使う際の注意点
- 新しい長さが現在の長さよりも短い場合、余分な文字は切り捨てられます。
- 文字列のバッファサイズは変更されません。つまり、バッファサイズは維持されたまま(=内部的には余裕を持った容量が保持されまま)、文字列の論理的な長さ(=見た目上の長さ)のみが変更されます。
// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
// 文字列を定義します
string text = "123456789012345";
// 文字列とその長さをエキスパートログに表示します
PrintFormat("StringSetLength()前の文字列 '%s' の長さは %d 文字", text, StringLen(text));
// 文字列の長さを10文字に短縮します
StringSetLength(text, 10);
// 文字列とその変更後の長さをエキスパートログに表示します
PrintFormat("StringSetLength()後の文字列 '%s' の長さは %d 文字", text, StringLen(text));
/*
結果:
StringSetLength()前の文字列 '123456789012345' の長さは 15 文字
StringSetLength()後の文字列 '1234567890' の長さは 10 文字
*/
}
サンプルコードに使われた関数や文法要素の簡単な解説
- OnStart関数: スクリプトが実行されるときに自動的に呼び出されます。
- StringSetLength
関数
: 指定された文字列の長さを設定します。 - PrintFormat関数: 指定されたフォーマットで文字列をエキスパートログに出力します。
- StringLen
関数
: 文字列の現在の長さを取得します。
このサンプルコードでは、まず15文字の文字列を定義し、それを10文字に短縮する様子を示しています。StringSetLength関数を使用することで、文字列の長さを動的に変更できるため、柔軟な文字列操作が可能になります。
StringSetLength関数とStringInit関数の違い
StringSetLength関数とStringInit関数は、どちらも文字列の初期化や設定に関わる関数ですが、用途と動作にいくつかの違いがあります。
目的:
- StringSetLength関数 既存の文字列の長さを設定します。新しい長さが短い場合、余分な文字は切り捨てられますが、バッファサイズは変更されません。
- StringInit関数: 新しい文字列を指定された文字で初期化し、その長さを設定します。
動作:
- StringSetLength関数: 既存の文字列の長さを変更しますが、内容はそのまま保持されます。
- StringInit関数: 文字列を指定された文字で完全に新しく初期化します。
バッファの扱い:
- StringSetLength関数: バッファサイズは変更されず、文字列の論理的な長さのみが変更されます。
- StringInit関数: 新しい文字列として初期化されるため、バッファも新しく設定されます。
使用ケース:
- StringSetLength関数: 既存の文字列の長さを変更したい場合に使用します。
- StringInit関数: 特定の文字で初期化された新しい文字列を作成したい場合に使用します。
<参照>
StringAdd関数/StringBufferLen関数/StringCompare関数/StringLen関数/StringConcatenate関数/StringFill関数/StringInit関数/StringFind関数/StringGetCharacter関数/StringReplace関数/StringReserve関数/StringSetCharacter関数/StringSplit関数/StringSubstr関数/StringToLower関数/StringToUpper関数/StringTrimLeft関数/StringTrimRight関数
コメント