我有代码
HANDLE file;
file = CreateFile(L"D:\\SystemWin\\a.txt",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if(file == INVALID_HANDLE_VALUE){
wprintf(L"Invalid file handle\n");
return 1;
}
wcsncpy(aBuffer, L"1234567890\0", BUF_SIZE);
WriteFile(file, aBuffer, wcslen(aBuffer), &writtenByte, NULL);
如果我在我的档案中说得对,我应该发短信" 1234567890"但我有12345而不是。什么可能是错的? BUF_SIZE是11
答案 0 :(得分:5)
wcslen
在空终止符之前返回wchar_t
中aBuffer
个元素的数量(在您的情况下,这是10)。
但是WriteFile
想要BYTES的数量。你需要这样做:
WriteFile(file, aBuffer, wcslen(aBuffer) * sizeof(wchar_t), &writtenByte, NULL);
另请注意,字符串文字在C中自动以null结尾。因此,字符串文字L"1234567890\0"
实际上是12个字符长(" 1234567890 \ 0 \ 0")。将其重写为L"1234567890"
代替。