voidOnStart()
{
string s1 = "_";
Print(StringBufferLen(s1)); //(1)//Ожидалось 260 вместо 0 - строка s1 далее может быть увеличенаStringInit(s1,1,'_');
conststring s2 = s1;
Print(StringBufferLen(s2)); //(2)//Ожидалось 0\1 вместо 260 - строка s2 константная и не может быть далее увеличена
}
在测试中添加了StringLen,并以不同方式初始化了字符串。文档中说的是一件事,实际行为却不一样。
而在这种情况下,缓冲区显示为0,而不是260。
文件规定了何时返回0,并且适合于指定的情况。
文件表明何时返回0,并适合于所指出的情况
该文件与当前的行为完全不相符!
而结果是不同的 ))两种类型的初始化之间有什么区别?
而且也不清楚左边的数字260是怎么来的。
该文件与当前的行为完全不相符!
文档:值为0意味着字符串是一个常量,缓冲区的内容不能被改变。
字符串被初始化为常数"_",编译器认为字符串有条件地(为了提高效率)成为常数--为什么不呢?为什么会有矛盾呢?更重要的是,没有用它进行进一步的操作。
而一般来说,并不清楚左数260的来历。
主持人已经解释了 从哪里来,以及为什么它在的情况下。
不出现--检查的理由
主持人澄清说,从哪里
我想我是用数字260得到的,编译器本身分配的StringBufferLen 缓冲区的初始大小为260。
所以,如果字符串的长度小于260,StringBufferLen将打印260,而不是实际的字符串长度。
而如果字符串的长度大于260,那么就会打印出实际的字符串值。
所以,使用StringBufferLen函数,如果字符串长度小于260个字符,我们不会得到实际的字符串长度,而总是得到260。
这一定是一个错误。
只要长度超过260个字符,我们就会得到真正的字符串长度。
p.s.由于文件已经过期,因此非常具有误导性。
也就是说,使用StringBufferLen函数,在字符串长度小于260个字符时,我们不会得到实际的字符串长度,而总是得到260。
这一定是一个错误。
只要长度超过260个字符,我们就会得到真正的长度。
严格意义上的字符串长度。 StringLen和缓冲区长度:StringBufferLen是相当罕见的函数。而且一般来说,它们可能不一致。
这使得两个至少是有问题的案例。
执行结果表明,编译器的行为与逻辑相反。
执行结果表明,编译器的行为与逻辑相反。
预先分配字符串缓冲区的大小是编译器的内部事务。
我们还将多次改变对字符串的处理。