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::wostringstream
geniş karakter akışlarını ve gibi std::ostringstream
genel 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.
}