C ++ MFC- strcpy错误

时间:2015-11-06 01:53:40

标签: c++ mfc

我对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 *没有合适的转换函数。

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

1 个答案:

答案 0 :(得分:3)

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

CString有两种特殊变体,CStingA字符charCStringW字符wchar_t。如果您使用CStringA,则会自动转换为const char *

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