将文本文件数据读入字符数组时提取运算符的歧义

ambiguity with extraction operator while reading a text file data into a character array

#include<iostream>
#include<fstream>
using namespace std;
void main()
{
  char word[5];
  ifstream file;
  file.open("abcd.txt",ios::in);
  if(file)
  {
    while(file>>word)
    {
       cout<<word<<" ";
    }
  }
  else
    cout<<"file not opened";
}

文件内容abcd.txt:

菠萝橙十七电脑

我得到的输出是:

pineapple orange seventeen computer

我提到数组大小为 5,但提取 (>>) 运算符将大小大于 5 的单词读入数组(但数组大小为 5!)。这是怎么发生的?。这是怎么回事可能吗?

我期望的输出是:

pinea orang seven compu

正如 Neil Butterworth 所提到的,>> 运算符无法知道 char 数组何时对于输入而言太小,因此可能会尝试写入超过数组末尾的内容。

写入数组末尾会导致 Undefined Behavior。这意味着 C++ 标准没有说明如果您尝试这样做会发生什么。您的程序可能会崩溃,但不能保证。 char 数组之后的内存也可能被用于其他用途,这会使您的程序表现得非常奇怪并且难以调试。当你有未定义的行为时,任何事情都可能发生。

在这种情况下,程序似乎很幸运 "worked" 因为数组后面的内存未被使用。但是,如果您使用不同的编译器编译它或在不同的环境中执行程序,我上面提到的事情之一可能会发生。如果还不清楚,你的程序中永远不应该有未定义的行为。