警告 C6392
此運算式會將指標的值寫入資料流。 如果這是刻意的,請將明確轉換新增至 'void *'
此規則已在 Visual Studio 2022 17.8 中新增。
備註
C++ 支援寬字元資料流 (例如 std::wostringstream
),以及非寬字元資料流 (例如 std::ostringstream
)。 嘗試將寬字串列印至非寬字串資料流時,會呼叫 operator<<
的 void*
多載。 此多載會列印寬字串的位址,而不是值。
程式碼分析名稱:STREAM_OUTPUT_VOID_PTR
範例
下列程式碼片段會列印標準輸出的指標值,而不是字串 "Pear"
:
#include <iostream>
int main() {
std::cout << L"Pear\n"; // Warning: C6392
}
有多種方式可以修正此錯誤。 如果列印指標值是非預期的,請使用非寬字串:
#include <iostream>
int main() {
std::cout << "Pear\n"; // No warning.
}
或者,使用寬字串資料流:
#include <iostream>
int main() {
std::wcout << L"Pear\n"; // No warning.
}
如果此行為是刻意的,請使用明確轉換讓意圖明確並消除此警告:
#include <iostream>
int main() {
std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}