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() ',等,如果你的编译器支持它们。他们会给你数组的大小而不是字节。 –