次のテストの準備のためにC++の練習問題に取り組んでいますが、これまでに見たことのないforループ条件に苦労しています。
for (int i = 0; s[i]; i++)
メインから送信された文字列s
は"Two roofs to fix"
問題は、forループの条件がいつfalseになるのかということです。
文字列の終了ゼロ'\0'
がヒットすると、ループ条件はfalseになります。(if (0)
falseと評価されます)
注意:この形式のテストは、文字列がnullで終了していない場合に発生するのを待っている可能性のあるエラーです。
@MitchWheatの答えを明確にするために、条件として使用される式がのような値のみを指定する場合、if (x)
それは本質的に。と同等if (x != 0)
です。値がポインタ型の場合、if (x != NULL)
代わりに同等です(ただし、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 *ではなく、文字列です。したがって、このようなコーディングは不適切です。