#define ECHOMAX 100
struct tDataPacket
{
int iPacket_number;
char sData[ECHOMAX];
};
int main() {
tDataPacket packet;
packet.iPacket_number=10;
strcpy(packet.sData,"Hello world");
char buffer[sizeof(tDataPacket)];
memcpy(buffer,&packet.iPacket_number,sizeof(int));
memcpy(buffer+sizeof(int),packet.sData,ECHOMAX);
std::cout<<"Buffer = "<<buffer<<"END";
return 0;
}
在上面的代碼中,我嘗試將結構打包在char []緩衝區中,以便我可以將它發送到UDP套接字。但是程序的輸出是「」字符串。所以沒有什麼是複製到'緩衝區'。我錯過了什麼?使用memcpy試圖將一個結構複製到char []緩衝區中
當您複製int時,緩衝區的第一個(sizeof(int))字符中的至少一個將爲零,這將終止字符串輸出。 – icabod
@Joachim Pileborg, 實際上,在這段代碼中沒有可變長度的數組,因爲所有的數組大小都是常量。 當sizeof(tDataPacket)是常量時,ECHOMAX被定義爲常量,因爲sizeof的結果類型是編譯時常量,而不管它的參數如何。 –
@rasen你說得對,一定有誤讀。 –