看完课本后我有点困惑。考虑一下C ++中的字符数组ar[10]
。在教科书中,它表示将为数组分配 10个字节。
从下标ar[0]
开始,我可以在给定数组中存储多少个元素?是10吗?如果是,我可以将数据存储在ar[10]
吗?我想知道将为该数组分配多少字节,因为我知道每个字符串都以\0
结尾。如果我尝试将字符存储到ar[10]
?
答案 0 :(得分:4)
如果是,我可以将数据存储在ar [10]
没有
在您的示例中,ar
是一个包含十个值的数组。第一个值是索引#0,因此包含ar[0]
到ar[9]
。这是这个数组中的十个值。数数吧。我们大多数人都很方便地拥有十个手指。从ar[0]
开始,用手指开始计时,当你用完所有十个手指时停止。你会停在ar[9]
。
尝试访问ar[10]
是未定义的行为。
答案 1 :(得分:0)
它将共存储10个项目,包括' \ 0'。所以,9个字符,一个' \ 0' ar [9]中的null终止符。
答案 2 :(得分:0)
你可以存储十个值,从索引0到索引9.这一开始看起来真的很错误,但请记住,0在技术上是一个值,必须计为一个。它有点像unsigned int
将如何保存2 ^ 32个值,但最高可用数字实际上是(2 ^ 32)-1。
请注意,如果您希望数组以空值终止,则只能存储9个字符,因为ar [9]将保留'\0'
。你可以在那里存储另一个字符,但是必须围绕你的C字符串不是以空值终止的事实编写你的代码。
众所周知,在C ++中对字符串使用字符数组通常被认为是不好的做法。它比使用字符串标准库更容易出错。
答案 3 :(得分:0)
因此,您已声明[10]因此它包含10个值。因为它是包含字符串和字符串的char数组由'\ 0'终止。 '\ 0'也是一个值。
因此,如果字符串长度为n,那么您的数组大小将为n + 1以保持n长度字符串。否则,将发生溢出。
请注意以下示例
int main(){
char a[1], r, t;
printf("Size %d Byte\n", sizeof(a));
a[0] ='a';
a[1] ='b';
a[2] ='c';
printf("%c\n",r); //c
printf("%c\n",t); //b
}
由于您的数组大小为1.虽然您没有指定r的值,但它分别由[2]和[1]自动分配。