Hier ist der Code für meine paint-Methode in meinem Win32-Projekt:Speicherfehler mit Typ L „“ in Win32
case WM_PAINT:
_tcscat_s(greeting, sizeof(greeting), LoadedFile);
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc,
5, 5,
greeting, _tcslen(greeting));
EndPaint(hWnd, &ps);
break;
ich konsequent die Störung erhalte, dass entweder der Stapel um Gruß oder um ps ist korrupt. Um es klar, Gruß initialisiert wie:
TCHAR greeting[100] = _T("Welcome! Your file is ");
Und LoadedFile
wird wie folgt initialisiert:
TCHAR LoadedFile[100];
LoadedFile[0] = 0;
LoadedFile
ist noch nicht durch irgendetwas geändert, so sollte es nichts zu greeting
das Hinzufügen . Ich habe Dinge wie
sizeof(greeting) + 1
versucht, die nur den Fehler verschiebt. Nicht sicher, was hier falsch ist.
Edit: Ohne die _tcscat_s()
, rufen Sie die Fenster lädt normalerweise
Den zweiten Parameter von '_tcscat_s()' erwartet, dass die Puffergröße in ** ** Zeichen, aber sie ausdrücken es in ** ** Bytes statt. Wenn 'TCHAR'' wchar_t' ist, ist 'sizeof (TCHAR)' 2, also ist 'sizeof (gruß)' 200, was '_tcscat_s()' erlaubt, die Grenzen zu verlassen. –
Danke, das ist wirklich sehr hilfreich – user6191359
Für statische Arrays können Sie Dinge wie ['_countof()'] (https://msdn.microsoft.com/en-us/library/ms175773.aspx), 'ARRAYSIZE() verwenden 'usw., wenn Ihr Compiler sie unterstützt. Sie geben Ihnen die Array-Größe in Elementen anstelle von Bytes. –