gpt4 book ai didi

c++ - 尝试将文件写入数组时运算符 << 出错

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:01 28 4
gpt4 key购买 nike

我正在尝试读取一个文件(它可以包含任意数量的随机数字,但不会超过 500 个)并将其放入一个数组中。

稍后我将需要使用数组来做很多事情。

但到目前为止,这一小段代码给了我 no match for operator<<在 while 循环中,我不知道该怎么做。

我是这方面的新手,我们将不胜感激。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
string line;
ifstream myfile ("array_pgmdata.txt");
int index = 0;
string myArray[index];

if (myfile.is_open())
{

while (! myfile.eof() )
{
getline (myfile,line);
myArray[index++] << line;
}
}

else cout << "Unable to open file";

return 0;
}

最佳答案

你有Undefined behavior .您正在使用 VLA大小为 0 并超出范围(即使索引 0 也会超出范围)。修复和评论:

#include <fstream>
#include <string>
#include <iostream> // std::cout
#include <vector>

using namespace std; // not recommended

int main () {
string line;
ifstream myfile ("array_pgmdata.txt");
//int index = 0; // not needed
//string myArray[index]; // UB - if it even compiles, it's a VLA of size 0.

std::vector<std::string> myArray; // use this instead to be able to grow it
// dynamically

if (myfile) // open and in a good state
{
// while (! myfile.eof() ) // It'll not be eof when you've read the last line
// only when you try to read beyond the last line,
// so you'll add "line" one extra time at the end
// if you use that. Use this instead:
while(getline(myfile, line))
{
// myArray[index++] << line; // you have 0 elements in the array and
// can't add to it in any way
myArray.push_back(line);
}
}
else cout << "Unable to open file";

// print what we got

// classic way:
for(size_t idx=0; idx < myArray.size(); ++idx) {
std::cout << myArray[idx] << "\n";
}

// using a range-based for loop
for(const std::string& s : myArray) {
std::cout << s << "\n";
}

// using a range-based for loop with auto
for(const auto& s : myArray) { // s is a std::string& here too
std::cout << s << "\n";
}
}

另请注意 myArray[index++] << line不是将字符串分配给字符串的方式。 myArray[index++] = line本来是正确的方法。我怀疑你用过 <<试图将字符串附加到您的 VLA,但您实际尝试使用的是一个如下所示的运算符:

std::string& operator<<(std::string& dest, const std::string& src);

不存在(除非您自己添加)。

关于c++ - 尝试将文件写入数组时运算符 << 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58713891/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com