簡體   English   中英

memcpy只復制c ++上的一個字節

[英]memcpy only copying one byte over c++

我正在嘗試使用memcpy將TCHAR數組轉換為BYTE數組,但memcpy函數只將1 TCHAR從tchar數組復制到字節數組中。

我不知道為什么會這樣。

這是一段代碼片段。

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";
DWORD testSizeBytes = sizeof(TCHAR) * lstrlen(test);
LPBYTE byteArray = new BYTE[testSizeBytes+1];
memcpy(byteArray,test,testSizeBytes);

如果我使用這個片段,byteArray只包含'T';

任何幫助,將不勝感激。

編輯:我修復了這個問題(這是一個錯字)。 我在這里寫的代碼完美無瑕。 我的編譯器在Windows VM中,所以我不得不在這里重新鍵入它並且在不知不覺中修復了錯字。

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";

這是一個寬字符( wchar_t )字符串。 在Windows上,定義了UNICODE ,即UTF-16。 在UTF-16中,字符'T'是2個字節。 第一個字節對應於'T'的ASCII值(十進制84)。 第二個字節是0.所以當你將它復制到你的字節數組時,它看起來像一個帶有1個字符的空終止c字符串。 其他字符在那里,但是它們出現在明顯的c-string結束之后,所以你的調試器顯然忽略了它們。

正如ajshort的評論所提到的,你的調試器可能沒有意識到你正在處理一個數組。

如果您可以使用調試器查看內存,請嘗試查看內存位置byteArray + 1byteArray + 2等。

我不在Windows上,所以我不能告訴你如何做到這一點,但等效的gdb命令將是x byteArray + 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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