1

C++ の文字列について質問があります。以下のコードに従って、ループがどこで停止するかを知りたいです。インデックス 3 またはインデックス 4 で null を取得しますか?

#include <cstdio>

int main ( ) {

  char name [20] = "Foo";

  name [4] = '\0';

  for (int i = 0; name[i] != '\0'; i++) {

       printf("This is the value of i so far in the loop : %d \n",i);
  }

  printf("This is the value of i : %d \n",i);

 return 0;

}

私がこれを尋ねている理由は、なぜ私の宿題で彼らが私たちにこのようなものを与えたのか理解できないからです. インデックス 4 に '\0' を作成する理由はありますか?

4

3 に答える 3

2

"Foo" は実際には {'F','o','o','\0'} であり、インデックス 0,1,2,3 に適合します。インデックス 4 から 19 までは、デフォルトで初期化されます (したがって、0-ed)。そして、インデックス 4 は後で '\0' で割り当てられます。

ループは最初の '\0' が一致したときに終了するため、値 0,1,2 が出力されます。ループの外ではi... ええと .. 未定義にする必要があります! (これはループ スコープ内で宣言されます)。

#include<cstdio>C の指導を受けた教師によって教えられたC++ の典型的な例 (ただし、std は参照されていないことに注意してください...)。彼におめでとう!

于 2012-04-08T06:34:40.530 に答える
1

インデックス 4 に '\0' を作成する理由はありますか?

絶対にありません。

この行:

char name [20] = "Foo";

次のように配列を初期化します。

name[0] <-- 'F'    First char of "Foo"
name[1] <-- 'o'    Second char of "Foo"
name[2] <-- 'o'    Third char of "Foo"
name[3] <-- '\0'   Fourth char of "Foo"
name[4..19] <-- 0  Extra spaces in array get zero-filled

したがって、この行:

  name [4] = '\0';

すでにゼロであることが保証されている場所にゼロを書き込みます。

したがって、インデックス 3 にはゼロがあります (「Foo」の最後の文字です)。位置 4 ~ 19 のすべてにゼロがあります (初期化子が配列より小さいため)。そして、重複して、インデックス 4 にゼロが書き込まれます。

于 2012-04-08T06:37:41.110 に答える
-1

私はそれが3であるべきだと思います:

name[0]='F' name[1]='o' name[2]='o' name[3]='\0' name[4]='\0'
于 2012-04-08T06:06:02.260 に答える