Aracılığıyla paylaş


Uyarı C6392

Bu ifade, işaretçinin değerini akışa yazar. Bu kasıtlı olarak yapılırsa , 'void *' öğesine açık bir atama ekleyin

Bu kural Visual Studio 2022 17.8'e eklendi.

Açıklamalar

C++ gibi std::wostringstreamgeniş karakter akışlarını ve gibi std::ostringstreamgenel olmayan karakter akışlarını destekler. Geniş bir dizeyi genel olmayan bir akışa yazdırmaya çalışmak aşırı yüklemesini operator<<çağırırvoid*. Bu aşırı yükleme, değer yerine geniş dizenin adresini yazdırır.

Kod analizi adı: STREAM_OUTPUT_VOID_PTR

Örnek

Aşağıdaki kod parçacığı, işaretçinin değerini dize "Pear"yerine standart çıktıya yazdırır:

#include <iostream>

int main() {
    std::cout << L"Pear\n"; // Warning: C6392
}

Bu hatayı düzeltmenin birden çok yolu vardır. İşaretçi değerini yazdırma istenmediyse, genel olmayan bir dize kullanın:

#include <iostream>

int main() {
    std::cout << "Pear\n"; // No warning.
}

Alternatif olarak geniş bir akış kullanın:

#include <iostream>

int main() {
    std::wcout << L"Pear\n"; // No warning.
}

Davranış kasıtlı olarak yapılırsa, amacı açık hale getirin ve açık bir atama kullanarak uyarıyı susturun:

#include <iostream>

int main() {
    std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}