2017-04-27 5 views
0

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

Antwort

0

Nun, ich fand das Problem, obwohl ich nicht wirklich verstehen, warum die Lösung funktioniert. Ich habe gerade

_tcscat_s(greeting, sizeof(greeting), LoadedFile); 

zu

_tcscat_s(greeting, 100, LoadedFile); 
+0

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. –

+0

Danke, das ist wirklich sehr hilfreich – user6191359

+0

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. –