Vector.push_back()在从File读取时添加相同的元素

问题描述 投票:0回答:1

我的代码正在从文件中读取一组元素并将其添加到Vector中。 for循环读取所有元素,并通过push_back将它们添加到向量中。在纸张上完美地工作但是:最后,向量中的所有元素都是相等的,并且始终是最后一个读取元素。

我百分之百肯定文件中列出的元素不一样(因为旧的NotePad ++)。我试图c-out读入元素来检查f_read函数是否有问题。该程序完美地输出了元素并且顺序正确。我猜错误不是文件或f_read函数。

FILE* f = fopen(filepath, "rb");
unsigned char header[19];
fread_s(header, sizeof(header), sizeof(unsigned char), 19, f);

vector<char*> myVector;
int size = 28 * 28;
char temp[28 * 28];

for (int i = 0; i < 2; i++) {
    fread_s(temp, 28*28, sizeof(unsigned char), size, f);
    myVector.push_back(temp);
}

(我读入“info”字符数组的19位是标题)

我期望Vector以正确的顺序包含所有Read元素。

c++ file vector fopen
1个回答
0
投票

正如评论中所提到的,你正在推回指针而不是实际的字符串。要获得实际字符串,您可以执行以下操作:

void readFileToVec()
{
    ifstream file;
    file.open ("rb");
    vector<string> v;
    string word;
    while (file >> word)
    {
        v.push_back(word);
    }
}

如果元素都是字符串并且由空格,制表符或换行符分隔,则此方法将起作用。如果您的单词除了这三个中的任何一个以外的任何内容(例如用逗号分隔的单词列表),那么您可以使用getline并指定分隔符。

在任何情况下,如果您打算再次使用C ++执行此类操作,那么阅读C ++流以及C风格字符串和STL字符串之间的区别将是值得的。您正在使用C字符串和旧学校FILE,它是C库的一部分,而C ++为您提供了实用程序,使您的生活更轻松。文件流和C ++字符串是此类实用程序的绝佳示例。

© www.soinside.com 2019 - 2024. All rights reserved.