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[]長度方法,歡迎留言交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章