2013-06-03 14 views
1

我正在試驗wchar_t,我嘗試將一個數組複製到另一個數組中。 這裏是我的代碼:使用wcscpy複製字符串

wchar_t name[]=L"Aayman Khalid"; 
wchar_t Name[50]=L""; 
wcscpy_s(Name,sizeof(name),name); 
printf_s("Name = %s\n", Name); 

但是當我運行此代碼,我得到即A的第一個字母。 有人可以向我解釋爲什麼這是什麼? 另外我怎麼能得到全名複製?

+1

還要注意wcscpy_s需要*數量的元素*,而不是字節數作爲第二個參數。 –

+0

@ claptrap,這意味着我必須給出數組元素的數量? –

回答

5

使用printf_s"%ls"說明符。

+0

@ DuXeN0N,謝謝它工作:),你能解釋給我一點點嗎? –

+0

wchar_t是一個16位字符類型,對於字母A,例如,第一個字節是65,第二個字節是零。對於printf,%s格式期望字符串以空字符結尾,即。爲零,因此它在顯示第一個字節後停止。 %ls需要16個字節的字符,因此會在滿足兩個零作爲終止字符時停止。 – SirDarius

+0

@AaymanKhalid,wchar_t是兩個字節的編碼字符。由於你的名字[]僅包含ASCII字母,每個字符的第二個字節爲零。 printf()與%s規範。打印字符,直到它看到空終止字節。所以,爲了讓printf知道你的字符串是兩個字節編碼的,你應該使用%ls。 – DuXeN0N