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()
,調用窗口加載正常
'_tcscat_s的第二個參數()'預計** **字符緩衝區的大小,但你在表達它** **字節代替。當'TCHAR'爲'wchar_t'時,'sizeof(TCHAR)'爲2,所以'sizeof(greeting)'爲200,允許'_tcscat_s()'出界限。 –
謝謝,這實際上非常有幫助 – user6191359
對於靜態數組,您可以使用諸如['_countof()'](https://msdn.microsoft.com/en-us/library/ms175773.aspx),'ARRAYSIZE() ',等,如果你的編譯器支持它們。他們會給你數組的大小而不是字節。 –