Aracılığıyla paylaş


C6276

C6276 Uyarı: arasında anlam farklı dize türleri artığını: char * wchar_t * için.Geçersiz dize kullanımını tanımsız davranışına neden olabilir

Bu uyarıyı bir ANSI dizeden büyük olasılıkla yanlış bir cast gösterir (char_t*) bir UNICODE dizesi (wchar_t *).Karakter boyutu 2 baytlık UNICODE dizeleri sahip olduğundan, bu cast doğru Sonlandırılmamış dize niceliğe.Bu tür dizeleriyle wcs * Kütüphane işlevleri ile arabellek taşmaları neden ve ihlalleri erişebilirsiniz.

Örnek

Aşağıdaki kod, bu uyarı oluşturur:

#include <windows.h>
VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;

   pSrc = (LPWSTR)"a";
   wcscpy(szBuffer, pSrc); 
}

Aşağıdaki kod, geniş bir karakter olarak ASCII karakteri temsil etmek için l Harfi ekleyerek bu uyarıyı düzeltir:

#include <windows.h>

VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;

   pSrc = L"a";
   wcscpy(szBuffer, pSrc);
}

Aşağıdaki kod güvenli dize işleme işlevini kullanır wcscpy_s, bu uyarı düzeltmek için:

#include <windows.h>

VOID f()
{
   WCHAR szBuffer[8];
   LPWSTR pSrc;
   pSrc = L"a";
   wcscpy_s(szBuffer,8,pSrc); 
}