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);
结果:
我想知道 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);
结果: