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