我对C ++ MFC编程很新。我很难理解C ++的代码。刚刚来自Java编程,对我来说它似乎是一个全新的世界。这距Android开发还有很长的路要走。
你能帮我理解这个问题吗?
这是完整的代码
public void push(E newData) {
if (size == data.length) {
E[] newDataArray = (E[]) (new Object[size * 2]);
for (int i = 0; i < size; i++) {
newDataArray[i + 1] = data[i];
}
newDataArray[0] = newData; // set the top to the new element
data = newDataArray; // set data to reference the bigger array
} else {
// shift all the elements int he array by one so that you can add the new element to the
// index 0
int i = size - 1;
while (i >= 0) {
data[i + 1] = data[i];
i--;
}
data[0] = newData;
}
size++;
}
该功能的这一部分复制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到const char *没有合适的转换函数。
我有一个在线参考,这是代码和其他评论似乎没有相同的问题。我想知道我的错是什么。
答案 0 :(得分:3)
这些天的默认构建是Unicode,它使用与wchar_t
类型不兼容的16位char
字符。
CString
有两种特殊变体,CStingA
字符char
和CStringW
字符wchar_t
。如果您使用CStringA
,则会自动转换为const char *
。
更好的方法是使用CF_UNICODETEXT
并继续使用普通CString
。您需要使用wcscpy
代替strcpy
,并分配两倍的字节数。