環境:使用VS2017
錯誤資訊:
1>------ 已啟動全部重新生成: 專案: ConsoleApplication1, 配置: Debug Win32 ------
1>test.cpp
1>e:\vs專案\26課\consoleapplication1\consoleapplication1\test.cpp(40): error C2664: “BOOL DeviceIoControl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED)”: 無法將引數 3 從“const char [15]”轉換為“LPVOID”
1>e:\vs專案\26課\consoleapplication1\consoleapplication1\test.cpp(40): note: 轉換丟失限定符
1>已完成生成專案“ConsoleApplication1.vcxproj”的操作 - 失敗。
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========
源代碼:
DWORD dwRet
char IoBuffer[1024] = { 0 };
DeviceIoControl(hDevice, CTLBUFFERED, "這是緩沖區方式", strlen("這是緩沖區方式") + 1, IoBuffer, sizeof(IoBuffer), &dwRet, NULL);
printf("IoBuffer %s\n", IoBuffer);
CloseHandle(hDevice);
return 0;
uj5u.com熱心網友回復:
因為LPVOID本質是 void*但是 const char [15] 本質是 const char*
他們的 const 修飾不兼容。
如果你確定這種寫法沒問題, 可以手動強制去掉const:
(char*)"這是緩沖區方式"
或者
const_cast<char*>("這是緩沖區方式")
uj5u.com熱心網友回復:
DWORD dwRetchar IoBuffer[1024] = { 0 };
char str[255]="這是緩沖區方式";
DeviceIoControl(hDevice, CTLBUFFERED, (void*)str, strlen(str) + 1, IoBuffer, sizeof(IoBuffer), &dwRet, NULL);
printf("IoBuffer %s\n", IoBuffer);
CloseHandle(hDevice);
uj5u.com熱心網友回復:
常量字串的存盤情況是不清晰的。應該用一個臨時的堆疊空間或堆空間存下來,然后再處理,像樓上回復的那樣。不應該手動去除常量字串的const屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/72810.html
標籤:C++ 語言
