c++中cin读取输入缓冲区的问题

测试代码如下:

cout << "Enter a string :  ";  // "Hello World"
char str1[5];
char str2[5];
cin >> str1;
cout << "str1 : " << str1;  // "Hello"
cin >> str2;
cout << "\nstr2 : " << str2; // "World"

修改后:

cout << "Enter a string :  ";  // "Hello World"
char str1[5];
char str2[5];
cin >> str1;    
cin.get();
cin >> str2;  
cout << "str1 : " << str1 << "\nstr2 : " << str2; // str1输出为空,str2 : World

是什么原因导致str1输出为空???

阅读 2.5k
1 个回答

std::cin >> str,str 为字符数组 或 字符指针,将执行以下操作:

  1. 忽略开头的空白字符
  2. 读取输入的字符,直到遇到空白字符 或 EOF
  3. 在 str 最后添加 '0'

问题中的 str1 是含有 5 个字符的数组,而输入字符串 “Hello” 也是含有 5 个字符,所以,当在 str1 后添加 \0 时,会越界,导致未定义的行为,所以,应该将数组字符串长度变大,或者将输入字符串变小,以避免未定义的行为

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题