Sdílet prostřednictvím


C6276

upozornění C6276: Přetypování mezi sémanticky rozdílnými řetězcovými typy: char* na wchar_t*.Použití neplatného řetězce může vést k nedefinovanému chování

Toto upozornění znamená potenciálně nesprávné přetypování řetězce ANSI (char_t*) na řetězec UNICODE (wchar_t *).Protože řetězce UNICODE obsahují znaky o velikosti 2 bajty, může toto přetypování vrátit řetězce, které nejsou správně ukončeny.Použití takových řetězců s knihovnou funkcí wcs* by mohlo způsobit přetečení vyrovnávací paměti a porušení přístupu.

Příklad

Následující kód generuje toto upozornění:

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

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

Následující kód opravuje toto upozornění připojením písmene L, které představuje znak ASCII jako široký znak:

#include <windows.h>

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

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

Následující kód používá pro opravu tohoto upozornění bezpečnou funkci pro práci s řetězci wcscpy_s:

#include <windows.h>

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