2015-11-06 109 views
-1

我对C++ MFC编程相当陌生。我很难理解C++的代码。只是来自Java编程,对我来说这似乎是一个全新的世界。这距离Android开发很远。C++ MFC- strcpy错误

你们能帮助我在这里理解这个问题?

下面是完整的代码

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 *的合适转换函数存在。

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

+0

看到这个链接复制Unicode文本到剪贴板http://stackoverflow.com/questions/15362859/getclipboarddata-cf-unicodetext –

回答

3

现在的默认构建是Unicode,它使用与char类型不兼容的16位wchar_t字符。

CString有两个专门的变种,CStingAchar字符和CStringWwchar_t字符。如果您使用CStringA,它将允许自动转换为const char *

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

+0

嗨!感谢您的信息。你有任何这方面的在线参考,我想阅读更多关于这些类型的数据类型。 – OrdinaryProgrammer

+0

你如何分配字节数两次?我注意到当我编辑我的程序时,我只得到了一半的字符串。 – OrdinaryProgrammer

+0

好的,我找到了另一种方法。我不确定是否可行。我只是改变了c.GetLength()+ 1到(c.GetLength()+ 1)* 2,它的工作。 – OrdinaryProgrammer