从文件

时间:2019-02-18 19:04:02

标签: c++ file vector fopen

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

我100%确信文件中列出的元素不相同(由于使用了很好的旧NotePad ++)。香港专业教育学院试图退出读取元素来检查f_read函数是否存在问题。程序以正确的顺序完美完美地输出了Elements。我猜错误不是文件或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位是标头)

我希望向量包含正确顺序的所有读取元素。

1 个答案:

答案 0 :(得分: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 ++字符串是此类实用程序的绝佳示例。