我有代码

   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。有什么错?但是大小为11

最佳答案

wcslen返回空终止符之前的wchar_taBuffer个元素的数目(在您的情况下为10)。

但是WriteFile想要字节数。您需要这样做:

WriteFile(file, aBuffer, wcslen(aBuffer) * sizeof(wchar_t), &writtenByte, NULL);


还要注意,字符串文字在C中会自动以null终止。因此,字符串文字L"1234567890\0"实际上是12个字符长(“ 1234567890 \ 0 \ 0”)。改写为L"1234567890"

关于c - WinAPI WriteFile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23626638/

10-16 12:21