【发布时间】:2020-12-16 18:08:59
【问题描述】:
我需要从一行中提取前 150 个字符并将它们保存在 char[] 数组中(不允许使用字符串)。我下面的代码不起作用,我只是找不到原因:
#include <ifstream>
#include <iostream>
using namespace std;
int main()
{
ifstream myFile;
myFile.open("message.txt");
if(!myFile.is_open()) cout<<"error"; //added this after edit
const int SIZE = 151;
char buffer[SIZE]={};
while(myFile.getline(buffer, 151)){
buffer[150]='\0';
cout<<buffer<<endl;
}
myFile.close();
}
这是“message.txt”的sn-p:
abcdefg
hijklmn
opqrstuv
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
hello
它只是什么也没打印出来。文件“message.txt”存在并且其中有几行字符。我哪里错了? 编辑:如果一行中的字符少于 150 个,则应全部读取。如果超过 150 个,则应忽略其余部分。
【问题讨论】:
-
你知道文件打开成功了.. 如何 ?
-
如果一行中的字符少于 150 个并且在读取的最后一个字符
getline和您在位置 150 添加的空终止符之间有一堆未初始化的垃圾会发生什么? -
在这种情况下为什么要打扰
char[]?我不会,除非它实际上需要成为一个缓冲区,比如以二进制模式读取。使用std::string和std::getline()会更轻松。 -
@sweenish
char buffer[SIZE]={};零初始化所有元素。 -
我无法重现此行为。我所做的只是将
#include <ifstream>更改为#include <fstream>(假设这是创建问题的错字并且实际代码编译!)并且它可以工作,包括示例message.txt。