gpt4 book ai didi

c++ - 打开超过 5 mb 的文件并将它们存储在数组中

转载 作者:行者123 更新时间:2023-11-28 01:00:38 24 4
gpt4 key购买 nike

我想将每个字节放入一个 char 数组并重写文本文件,删除前 100,000 个字符。

    int fs=0;
ifstream nm,nm1;

nm1.open("C:\\Dev-Cpp\\DCS\\Decom\\a.txt");

if(nm1.is_open())
{
nm1.seekg(0, ios::end );
fs = nm1.tellg();

}
nm1.close();


char ss[500000];

nm.open("C:\\Dev-Cpp\\DCS\\Decom\\a.txt");
nm.read(ss,fs-1);
nm.close();

ofstream om;
om.open("C:\\Dev-Cpp\\DCS\\Decom\\a.txt");
for(int i=100000;i<fs-1;i++){
om >> ss[i];
}
om.close();

问题是我无法将字符数组设置为 500 万大小。我也尝试使用 vector

    vector <char> ss (5000000); 
int w=0;

ifstream in2("C:\\Dev-Cpp\\DCS\\Decom\\a.txt", ios::binary);
unsigned char c2;
while( in2.read((char *)&c2, 1) )
{
in2 >> ss[w];
w++;
}

这里 w 的大小几乎是 fs 的一半,并且丢失了很多字符。

怎么做?

最佳答案

在大多数实现中,char ss[5000000] 尝试在堆栈上进行分配,并且堆栈的大小与总内存大小相比是有限的。您通常可以在堆上分配比在堆栈上更大的数组,如下所示:

char *ss = new char [5000000];
// Use ss as usual
delete[] ss; // Do not forget to delete

请注意,如果文件大小 fs 大于 5000000,您将写入超过缓冲区的末尾。您应该限制读取的数据量:

nm.read(ss,min(5000000,fs-1));

关于c++ - 打开超过 5 mb 的文件并将它们存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862039/

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