C++读写文件的二进制流转为字符串被截断的问题

在写完程序时候运行中断发现读取出来的文件流放进char[]后长度只有几个字节,但是可以将这个cha[]重新写成文件

CFile file;  
char* imgbuf1= NULL;  //存放图片的char[]

file.Open(_T("1.jpg"),CFile::modeReadWrite);
const int lengthf1 = file.GetLength(); 
imgbuf1= new char[lengthf1]; //重定义char[]长度为文件流长度
memset(imgbuf1, 0, sizeof(char) * lengthf1);
file.Read(imgbuf1,lengthf1);//读取完之后imgbuf1打印会截断,中断也只能看到几个字节
file.Close();

查阅资料后发现,读取出来的二进制流会存在\0,\0在字符串中表示结束符.所以当调用打印字符串的函数或者计数的函数,都会从\0这里截断,只会打印或者计数\0前面的字节,所以当需要使用存放文件流的char[]时后中间不能再进行字符串的转换

如果需要将存放文件流的char[]和其他字符串合在一起.不能使用strcpy和strcat,要重新将其他字符串放一个char[]里,划分一个长度更大的char[]使用memcpy将两个char[]合在一起.如下就在文件流的前面加上"文件流是:"

char strFileconnet1 [1024] = "文件流是:";
int len1 = strlen(strFileconnet1);   //纯字符串的使用strlen
const int lenstr = lengthf1 + len1; 
imgmsg = new char[lenstr];
memcpy(imgmsg,strFileconnet1, len1);
memcpy(imgmsg+len1,imgbuf1,sizeof(imgmsg));

但是这个char[]的长度不能再用strlen,或者sizeof了,长度就是lenstr,如果其他人有好的计算char[]长度方法,欢迎留言交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值