WinAPI WriteFile

use*_*343 -2 c windows winapi

我有代码

   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); 
Run Code Online (Sandbox Code Playgroud)

如果我在我的文件中找到它,我应该有文本"1234567890",但我有12345.什么可能是错的?BUF_SIZE是11

ten*_*our 5

wcslen返回null终止符之前的wchar_t元素数aBuffer(在您的情况下,这是10).

但是WriteFile想要BYTES的数量.你需要这样做:

WriteFile(file, aBuffer, wcslen(aBuffer) * sizeof(wchar_t), &writtenByte, NULL); 
Run Code Online (Sandbox Code Playgroud)

另请注意,字符串文字在C中自动以null结尾.因此,您的字符串文字L"1234567890\0"实际上是12个字符长("1234567890\0\0").改写它只是L"1234567890"改为.