[英]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 + 1
和byteArray + 2
等。
我不在Windows上,所以我不能告訴你如何做到這一點,但等效的gdb
命令將是x byteArray + 1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.