char类型数组中的空字符影响输出。
我了解到,将字符串输入到char数组后,在输入的末尾添加了一个空字符。 cout函数遇到空字符时会自动停止打印。但是,我将索引 3 处的空字符(最初存在)替换为字符“d”,并将索引 4 设置为“e”。结果,我的程序的输出是dogde,后跟随机字符,直到数组大小结束。例如,它会打印dogde’’’’’’直到数组大小结束。我老师的结果显示,在索引 5 和 6 处添加两个随机字符后,空字符被放置在索引 7 处。
这是我的问题:
为什么空字符不会自动添加到字符“e”(索引 4)之后,以及为什么输出包含随机字符直到数组大小末尾? 如果我们不使用数组的完整大小,其他数组类型是否会自动分配空值?据我所知,其他数据类型的值都设置为 0,那么为什么 char 数组的值不同呢?
#include <iostream>
using namespace std;
int main()
{
char array[10];
cin >> array;
cout << "Ket qua la " << array;
int i = 0;
while (array[i] != '\0' && i < 10)\
{
i++;
}
if (i < 9)
{
cout << endl << i;
}
cout << endl << "Sau do" << endl;
array[i] = 'd';
array[i + 1] = 'e';
cout << array;
}
为什么空字符不会自动添加到字符“e”(索引 4)之后
没有人向C++委员会提出这个提案。如果有人这样做,我很确定它会很快被关闭,因为大多数人不希望在更改数组中的元素时更改其他元素。
为什么输出包含随机字符直到数组大小末尾?
array
开始时的值不确定,因为您尚未初始化它。
char array[10]{}; // Example of an array initialized with all `\0`
输入一个单词后,例如
Hi!
,在std::cin >> array
中,array
中只会初始化4个字节。 H
、i
、!
、\0
和其余字节仍然不确定。它们可以是任何东西 - 这就是您在打印时看到的“垃圾”array
。另请注意,在删除第一个后,不能保证 \0
中会有 array
,因此打印它可能会导致打印例程读取越界,这可能会导致程序崩溃(或更糟) .
如果我们不使用数组的完整大小,其他数组类型是否会自动分配空值?
基本类型的局部变量,如
char
和 int
,则不会。这包括此类类型的数组。它还包括此类类型的类,这些类在构造时不会初始化它们。
据我所知,其他数据类型的值都设置为 0,那么为什么 char 数组的值不同呢?
不,那是错误的。如果您不初始化它们,它们将处于不确定状态。