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);
}