簡體   English   中英

C ++ Char指向char數組的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM