我正在研究我的 C++ 练习题,为即将到来的测试做准备,我正在努力解决我以前从未见过的 for 循环条件。
for (int i = 0; s[i]; i++)
从主发送的字符串s
是"Two roofs to fix"
问题是 for 循环的条件何时会变为假?
当字符串的终止零'\0'
被命中时,循环条件变为假。(if (0)
评估为假)
请注意:如果字符串不是以空值结尾的,这种形式的测试可能会等待发生错误。
只是为了澄清@MitchWheat 的答案,如果用作条件的表达式仅指定一个值,例如if (x)
,那么它本质上等同于if (x != 0)
. 如果该值是一个指针类型,那么它等价于if (x != NULL)
instead(尽管这并不是真正的“instead”,因为 NULL == 0)。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s = "Two roofs to fix";
int i;
for (i = 0; s[i]; i++);
cout<<"i = "<<i<<endl;
}
我用上面的代码测试了这个问题。它返回错误“字符串下标超出范围”。因此,如果字符串 s 的长度是 Len,则 s[Len] 是非法的。在您的代码中, s 不是指针 char*,而是一个字符串。所以这样编码是不合适的。