分享方式:


警告 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.
}