错误、漏洞、问题 - 页 3019

 
Andrei Trukhanovich:

看来count=0的工作方式与count=-1相同,在""的情况下,它会复制一个终端空。

这就是错误所在,只是用一个实际的例子来说明,一般来说,空字符串和count = 0本身都可能存在(例如在一个循环中)。

 
A100:

又有多少人

如果count = 0,它应该复制吗?

提示:当count = 3时,将复制3个字符。

我甚至不打算争论。它工作正常。

Andrei Trukhanovich:

看起来count=0与count=-1的工作方式相同,在""的情况下,它复制了一个终端空,所以你不能正确地转换一个空字符串而不进行额外的检查。

空字符串(NULL)不包含终端空。那里的一切似乎都是合乎逻辑的。

 
fxsaber:

我甚至不打算争论。它的工作原理是正确的。

如果没有争论,那当然就不用了。

fxsaber:

空字符串(NULL)不包含终端空。在我看来,一切都在逻辑上运作。

空字符串是"",而NULL不是一个空字符串--它是一个未初始化的字符串,即它根本不是一个字符串,用NULL的StringToCharArray 不工作,错误结果:4009

 
A100:

如果没有争论,那么你当然不需要

空字符串是"",而NULL不是空字符串--它是一个未初始化的字符串,也就是说,它根本不是一个字符串,用NULL的StringToCharArray 不工作,错误结果:4009

说句不好听的,你搞错了。

 
fxsaber:

说句不好听的,你搞错了。

如果你对案情有什么要说的,请解释。

 
A100:

如果你对案情有什么要说的,请解释。

string Str = NULL;

Print(Str == "");
 
fxsaber:

结果:假

而这一说法的矛盾之处在于什么?

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

A100, 2021.05.24 20:07

空字符串是"",而NULL不是一个空字符串--它是一个未初始化的字符串,这意味着它根本不是一个字符串,用NULL的StringToCharArray 不工作,导致错误:4009


 
A100:

结果:假

而这一说法的矛盾之处在于什么?

该变量已被初始化。当然,你可以把字符串看作是一个指向内部字符串类的指针。

 
fxsaber:

该变量被初始化。当然,你可以把字符串看作是一个指向内部字符串类的指针。

如果它被初始化了,那么为什么会出现

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

错误4009

误导性的字符串

4009

未初始化的字符串

 
fxsaber:

我甚至不打算争论。它工作正常。

空字符串(NULL)不包含终端空。在我看来,一切都在逻辑上运作。


这不是问题,问题是这段代码返回4,应该返回0。

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