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

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

本文关键字:提取 运算符 歧义 数组 字符 文件 文本 数据      更新时间:2023-10-16
#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,但 extraction(>>( 运算符将大小大于 5 的单词读取到数组中(但数组大小为 5!这是怎么发生的?.这怎么可能?

我期望的输出是:

pinea orang seven compu

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

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

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