设置for循环以循环直到检测到空字节

时间:2012-04-08 06:01:34

标签: c++

我对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'?

3 个答案:

答案 0 :(得分:2)

“Foo”实际上是{'F','o','o','\ 0'},并且适合索引0,1,2,3。 默认初始化索引4到19(因此为0-ed)。稍后将索引4分配为'\ 0'。

当第一个'\ 0'匹配时,循环结束,因此打印值为0,1,2。 走出循环i shold ...哼...不定义! (它在循环范围内声明),但是如果你的编译器没有清理你很可能会打印3。

C ++的一个典型例子(注意#include<cstdio>,但没有std从未引用过......)由C指导老师讲授。 祝贺他!

答案 1 :(得分: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写入零。

答案 2 :(得分:-1)

我认为它应该是3:

name[0]='F' name[1]='o' name[2]='o' name[3]='\0' name[4]='\0'