エラー、バグ、質問 - ページ 3019

 
Andrei Trukhanovich:

count=0はcount=-1と同じように動作し、""の場合は末尾の0をコピーするようです。

これは、一般的に 空の文字列と count = 0 の両方が存在する可能性のある実際の例で示されています(たとえば、ループ内)。

 
A100:

そして、どれだけの

count = 0 の場合、コピーする必要がありますか?

ヒント:count = 3で3文字がコピーされます。

反論する気も起きない。正常に動作しています。

Andrei Trukhanovich:

count=0はcount=-1と同じように動作するようで、""の場合は端末のnullをコピーするので、追加のチェックをしないと空の文字列を適切に変換できないようです

空の文字列(NULL)は、端末のNULLを含まない。そこでは、すべてが論理的に動いているように見えます。

 
fxsaber:

反論する気も起きない。正常に動作しています。

反論がないのであれば、当然ながら、その必要はありません。

fxsaber

空の文字列(NULL)は、端末のNULLを含まない。私見ですが、そこではすべてが論理的に動いています。

空文字列は "" であり、NULL は空文字列ではありません - 初期化されていない文字列、つまり文字列ではありません。

 
A100:

引数がない場合は、当然ながら

空文字列は "" であり、NULL は空文字列ではありません。つまり、初期化されていない文字列であり、NULL を含むStringToCharArray は動作しません。

控えめに言って、あなたは勘違いしています。

 
fxsaber:

控えめに言って、あなたは勘違いしています。

メリットについて言いたいことがあれば、説明してください。

 
A100:

メリットについて言いたいことがあれば、説明してください。

string Str = NULL;

Print(Str == "");
 
fxsaber:

結果:false

そして、この発言との矛盾は何でしょうか?

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

A100, 2021.05.24 20:07

空文字列は""ですが、NULLは空文字列ではなく、初期化されていない文字列 であり、文字列ではありません。


 
A100:

結果:false

そして、この発言との矛盾は何でしょうか?

変数が初期化される。もちろん、stringは内部の文字列クラスへのポインタと考えることができます。

 
fxsaber:

変数が初期化される。もちろん、stringは内部の文字列クラスへのポインタと考えることができます。

初期化されているのであれば、なぜ

void OnStart()
{
    uchar array[];
    const string text = NULL;
    StringToCharArray( text, array );
    Print( GetLastError());
}

エラー4009

err_notinitialized_string

4009

未初期化文字列

 
fxsaber:

反論する気も起きない。正常に動作しています。

空の文字列(NULL)は、端末のNULLを含まない。私見ですが、そこではすべてが論理的に動いています。


問題はそこではなく、このコードは4を返し、0を返すべきだということです。

Print(StringToCharArray( "ABC", array, 0, 0));