2017-04-27 68 views
0

下面是我在Win32的項目我的paint方法的代碼中的內存錯誤:與L型「」在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; 

我一直獲得,要麼堆周圍問候或周圍PS錯誤已損壞。需要明確的是,問候就像初始化:

TCHAR greeting[100] = _T("Welcome! Your file is "); 

而且LoadedFile初始化這樣的:

TCHAR LoadedFile[100]; 
LoadedFile[0] = 0; 

LoadedFile尚未被任何東西改變了,所以它不應該添加什麼greeting 。我試過類似

sizeof(greeting) + 1 

這只是改變了錯誤。不知道這裏有什麼問題。

編輯:沒有_tcscat_s(),調用窗口加載正常

回答

0

好吧,我發現這個問題,儘管我真的不明白,爲什麼解決方案工作。我只是改變

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

_tcscat_s(greeting, 100, LoadedFile); 
+0

'_tcscat_s的第二個參數()'預計** **字符緩衝區的大小,但你在表達它** **字節代替。當'TCHAR'爲'wchar_t'時,'sizeof(TCHAR)'爲2,所以'sizeof(greeting)'爲200,允許'_tcscat_s()'出界限。 –

+0

謝謝,這實際上非常有幫助 – user6191359

+0

對於靜態數組,您可以使用諸如['_countof()'](https://msdn.microsoft.com/en-us/library/ms175773.aspx),'ARRAYSIZE() ',等,如果你的編譯器支持它們。他們會給你數組的大小而不是字節。 –