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