cin.get() 函数如何工作?

how does cin.get() function works?

我想知道 cin.get() 函数是如何工作的?

例如,我有 256 个字符的 char 数组。如果输入包含的字符少于 256 个,那么 'empty' 数组元素包含什么?每个未使用的元素都是'\0'还是什么?

提前致谢, 贾尼斯

数组中未填充的部分保持不变。如果数组是新的,通常您会看到零,因为操作系统会将新分配的页面清零。将此视为神器,期待 anything.

get()basic_istream class 的重载函数。假设您这样称呼它:

cin.get(array, size)

然后它将在数组中填充最多 size - 1 个字符。其余的保持不变,因此您无法知道它们具有的价值。

If input contains less than 256 characters, what's 'empty' array elements containing then? Is every unused element is '[=17=]' or what?

视情况而定。

全局变量和静态变量默认初始化。局部变量未初始化 - 除非您显式初始化它们。

char buf1[256]; // global variable, all zeroes

int main() {
    char buf2[256]; // uninitialized memory
}

buf1 读取具有明确定义的行为,但从 buf2 读取则没有,因此如果您 std::cin.get(buf2, <some_size>); 并从 [=15=] 之外的内存中读取 std::cin.get() 放入你的数组,你的程序将有 undefined behavior.

要对此进行修改,您也可以默认初始化局部变量:

int main() {
    char buf2[256]{}; // default initialized memory
}

例如,您有一个简单的代码,您输入了一个字符串 "ex: Hello world!",如下所示:

char str[256]; // Uninitialized variable
std::cin.get(str, 256);

结果:

相同的代码,但带有初始化变量:

char str[256] = {}; // Initialized variable
std::cin.get(str, 256);

结果: