[英]C++ Char pointer to char array
我讀過的所有答案都沒有,所以我再問一遍。
我正在嘗試將char指針指向的字符串數據復制到char數組中。
我有一個函數,從ifstream讀取到char數組
char* FileReader::getNextBytes(int numberOfBytes) {
char *buf = new char[numberOfBytes];
file.read(buf, numberOfBytes);
return buf;
}
然后我有一個結構:
struct Packet {
char data[MAX_DATA_SIZE]; // can hold file name or data
} packet;
我想將從getNextBytes(MAX_DATA_SIZE)返回的內容復制到packet.data中;
編輯:讓我告訴你我所得到的所有答案(memcpy,strcpy,傳遞參數)。 我認為錯誤來自其他地方。 我正在讀一個二進制文件(它是一個png)。 我將循環而fstream是好的()並從fstream讀取到buf(可能是數據數組)。 我想看看我讀過的內容的長度:
cout << strlen(packet.data) << endl;
每次返回不同的大小:8 529 60 46 358 66 156之后,顯然沒有剩余的字節可讀,盡管文件長度為13K +字節。
這可以使用標准庫函數memcpy來完成,它在/中聲明:
strcpy(packet.data, buf);
這需要file.read返回以'\\ 0'結尾的正確char系列。 您可能還希望確保numberOfBytes足以容納整個字符串。 否則你可能會出現分段錯誤。
//if buf not properly null terminated added a null char at the end
buf[numberofbytes] = "\0"
//copy the string from buf to struc
strcpy(packet.data, buf);
//or
strncpy(packet.data, buf);
編輯:
是否將其作為字符串處理是一個非常重要的區別。 在你的問題中,你把它稱為“字符串”,這讓我們感到困惑。
沒有任何圖書館協助:
char result = reader.getNextBytes(MAX_DATA_SIZE);
for (int i = 0; i < MAX_DATA_SIZE; ++MAX_DATA_SIZE) {
packet.data[i] = result[i];
}
delete [] result;
使用#include <cstring>
:
memcpy(packet.data, result, MAX_DATA_SIZE);
或者為了額外的功勞,重寫getNextBytes
,使其具有輸出參數:
char* FileReader::getNextBytes(int numberOfBytes, char* buf) {
file.read(buf, numberOfBytes);
return buf;
}
那就是:
reader.getNextBytes(MAX_DATA_SIZE, packet.data);
編輯2:
要獲取文件的長度:
file.seekg (0, ios::end);
int length = file.tellg();
file.seekg (0, ios::beg);
隨着手頭......
char* buffer = new char[length];
file.read(buffer, length);
現在您將整個文件放在buffer
。
strlen不是確定二進制數據量的有效方法。 strlen只是讀取,直到它找到'\\ 0',僅此而已。 如果要讀取一塊二進制數據,只需使用std :: vector,將其大小調整為從文件中讀取的字節數,然后將其作為值返回。 問題解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.