C++ MFC—Strucy错误 我对C++ MFC编程相当熟悉。我很难理解C++的代码。刚从Java编程中诞生,对我来说,这似乎是一个全新的世界。这离Android开发还有很长的路要走

C++ MFC—Strucy错误 我对C++ MFC编程相当熟悉。我很难理解C++的代码。刚从Java编程中诞生,对我来说,这似乎是一个全新的世界。这离Android开发还有很长的路要走,c++,mfc,C++,Mfc,你们能帮我理解这个问题吗 这是完整的代码 CString c; code.GetWindowText(c); AfxMessageBox(c); OpenClipboard(); EmptyClipboard(); // Setup a memory HANDLE for the clipboard HANDLE hMem = GlobalAlloc(GMEM_FIXED, c.GetLength() + 1); char* pStr = (char*)GlobalLock(hMem);

你们能帮我理解这个问题吗

这是完整的代码

CString c;
code.GetWindowText(c);
AfxMessageBox(c);

OpenClipboard();
EmptyClipboard();

// Setup a memory HANDLE for the clipboard
HANDLE hMem = GlobalAlloc(GMEM_FIXED, c.GetLength() + 1);
char* pStr = (char*)GlobalLock(hMem); 
strcpy(pStr, c); //error here 
GlobalUnlock(hMem);

// Tell Clipboard to use our handle now.
::SetClipboardData(CF_TEXT, hMem);

CloseClipboard();
函数的这一部分复制CString并将其分配到剪贴板。 我发现了错误

不存在从CString到const char*的合适转换函数


我有一个在线参考,这是代码和其他评论似乎没有同样的问题。我想知道我的错在哪里。

现在的默认版本是Unicode,它使用与字符类型不兼容的16位wchar\t字符

CString有两种特殊的变体,CStingA用于字符,CStringW用于字符。如果使用CStringA,它将允许自动转换为const char*


更好的方法是使用CF_UNICODETEXT并继续使用正常的CString。您需要使用wcscpy代替strcpy,并分配两倍的字节数。

有关将Unicode文本复制到剪贴板的信息,请参阅此链接!谢谢你提供的信息。你有关于这方面的在线参考吗?我想了解更多关于这类数据类型的信息。你如何分配两次字节数?我注意到当我编辑我的程序时,我只得到了一半的字符串。好吧,我找到了另一种方法。不过我不确定这是否明智。我刚把c.GetLength+1改为c.GetLength+1*2,效果很好。@OrdinaryProgrammer这正是我要说的。