我正在尝试从名为“ file.dat”的文件中读取一些文本。问题是,文件中的字符串与标准C一样在结尾处不包含零。因此,我需要添加零的内容,这样我就可以使用该字符串,而在打印时该字符串之后不会出现随机符号
void cSpectrum::readSpectrum(const std::string &filename, double
tubeVoltage, double &minEnergy, std::string &spectrumName)
{
//Object with the name "inp" of the class ifstream
ifstream inp(filename, ios::binary);
//Checks if the file is open
if (!inp.is_open()) {
throw runtime_error("File not open!");
}
cout << "I opened the file!" << endl;
//Check the title of the file
string title;
char *buffer = new char[14];
inp.read(buffer, 14);
cout << buffer << endl;
}
目前,我得到以下输出,我想在没有²²²┘的情况下得到它。
我打开了文件!
x射线光谱²²²²┘
答案 0 :(得分:3)
只需为您的数组分配另外+1个char
,但不要读入该char
,只需将其设置为0
:
char buffer[15];
inp.read(buffer, 14);
buffer[14] = '\0';
cout << buffer << endl;
或者,根本不使用char[]
,而是使用std::string
,请参见:
What is the best way to read an entire file into a std::string in C++?
答案 1 :(得分:0)
我现在是用std::string
做的。如果需要,可以用整数变量替换14。
void cSpectrum::readSpectrum(const std::string & filename, double tubeVoltage, double
& minEnergy, std::string const & spectrumName){
ifstream inp(filename, ios::binary);
//Checks if the file is open
if (!inp.is_open()) {
throw runtime_error("ERROR: Could not open the file!");
}
//Reads the title
string title(14, '\0');
inp.read(&title[0], 14);
//If it is not the correct file throw an ERROR
if (title != spectrumName)
throw runtime_error("ERROR: Wrong file title");
readSpectrum(inp, tubeVoltage, minEnergy, spectrumName);
}