将文本文件数据读入字符数组时提取运算符的歧义
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" 因为数组后面的内存未被使用。但是,如果您使用不同的编译器编译它或在不同的环境中执行程序,我上面提到的事情之一可能会发生。如果还不清楚,你的程序中永远不应该有未定义的行为。
#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" 因为数组后面的内存未被使用。但是,如果您使用不同的编译器编译它或在不同的环境中执行程序,我上面提到的事情之一可能会发生。如果还不清楚,你的程序中永远不应该有未定义的行为。