c++ 从文件中fin.read()和fin.write()

#include<iostream>#include<fstream>usingnamespacestd;intmain(intargc,constchar*argv[]... #include <iostream>

#include <fstream>

using namespace std;

int main(int argc, const char * argv[]) {

unsigned char *z;

int k;

ifstream fin("/Users/wuzihong/Desktop/Untitled1.jpg",ios::binary);

fin.seekg(0,ios::end);

int size1 = fin.tellg();

fin.seekg(0,ios::beg);

cout<< "文件大小为:"<<size1<<" 字节"<<endl;

ofstream fout("/Users/wuzihong/Desktop/2.jpg",ios::binary);

k=300;

z= new unsigned char[k];

while (fin.read((char *)(&z), k*sizeof(char)))

{

size1=size1-k;

fout.write((char *)(&z), k*sizeof(char));

if (size1 < k)

{

fin.read((char *)(&z), size1*sizeof(char));

fout.write((char *)(&z), size1*sizeof(char));

}

}

fin.close();

fout.close();

return 0;

}

求大神看看,我这个Untitled1.jpg是610kb的图片,小文件,当我把程序中的k值开到300以上,就出现了生成文件损坏,当我把k值开到400多程序就会挂掉,无法fin.write(),当我把k开到1000以上,程序就不能读入,请问为什么呢~不管是fin什么文件都是这样,困扰了好久了,求解决~谢谢
展开
 我来答
wdghy123
推荐于2016-08-03 · TA获得超过1583个赞
知道大有可为答主
回答量:1514
采纳率:95%
帮助的人:730万
展开全部
//文件的读取输入改成这样试试
while (fin.read((char *)z, k*sizeof(char)))

{

size1=size1-k;

fout.write((char *)z, k*sizeof(char));

if (size1 < k)

{
memset(z,k,0);

fin.read((char *)z, size1*sizeof(char));

fout.write((char *)z, size1*sizeof(char));

}

}
更多追问追答
追问
确实可以用了,但不知道为什么,可以讲一下吗?谢谢,当我把memset函数去掉,程序也可以正常执行
追答
z表示创建的内存缓冲区的地址
&z是指针z的地址,不能有做缓冲区的地址
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式