我有一個類項目在C++中創建一個web服務器。一切都很順利,直到我到了需要託管圖像或pdf的地步,此時文件已損壞。做更多的挖掘,我意識到所有損壞的圖像在結束之前都有空字符。Char陣列在結束之前包含空字符
這使我想到我的問題。我有一個char *,我已經讀過這些文件,並且我知道文件的長度。我非常肯定整個文件正在讀入(下面的代碼),但我不知道如何打印出來或發送它。我如何告訴C++我想發送char *之後的第一個X字符? (我敢肯定的答案是這裏的某個地方或者在網絡上,我只是不能似乎短語我的問題以正確的方式去尋找答案)
ifstream myfile (path.c_str() , ios::in|ios::binary|ios::ate);
ifstream::pos_type size = myfile.tellg();
cout << size << endl;
fileSize = (int) size;
fileToReturn = new char [size];
myfile.seekg (0, ios::beg);
myfile.read (fileToReturn, size);
myfile.close();
cout << "file read\n"<< fileToReturn << endl;
對於一個純文本文件,這將輸出精細。對於PDF,它只打印文件的第一部分(第一個空字符之前的部分)。我怎樣才能打印出整個文件?
編輯:爲了澄清,我的最終目標是通過網絡發送,而不是重新保存文件。
// reply is string with all my headers and everything set.
// fileToReturn is my char*, and fileSize is the int with how long it should be
char* totalReply = new char [reply.length() + fileSize+1];
strcpy(totalReply, reply.c_str());
strcat(totalReply, fileToReturn);
send(client, totalReply, reply.length() + fileSize, 0);
如果你的數據不是「弦」,爲什麼您使用的strcpy,等...使用memcpy準備緩衝區內。 –
看起來你不太清楚「C字符串」是什麼。它是一個8位ASCII字符的數組,以\ 0字符結尾。字節數組本身可以更長(對於需要數組長度的函數),但字符串函數*只考慮到第一個\ 0之前的部分(即使數組實際更短,在這種情況下,您會得到緩衝區溢出)。 – hyde
我最初開始使用字符串,它工作正常,直到我移動二進制文件,然後我想我忘了改變一些事情。 –