我们有cpp dll,在那里我可以缩小到崩溃发生的地方。该行与copy相关,即:
void GetCellText(HWND ssHwnd,char *& output){
CString sData;
....
....
strcpy (output, sData) //app crashes here
}
所以我替换了这样的strcpy:
void copyToOutput(char *& output, CString sData) {
int strLen = sData.GetLength();
output = (char *) malloc(sizeof(char) * strLen + 1); // Allocate memory
LPTSTR p = sData.GetBuffer(strLen);
strcpy(output, p);
output[strLen] = '\0'; // Null terminate
sData.ReleaseBuffer();
}
然而,我仍然看到崩溃失败。你有没有人建议我的修复不正确。
答案 0 :(得分:0)
该代码可能存在一些问题:
strcpy
,因为它很容易溢出目标缓冲区。在您的情况下,您知道要复制的字符串的长度,没有理由不使用memcpy
,例如memcpy(output, p, strLen)
。malloc
分配的。此代码的调用者可能会意外地使用free[]
来解除分配。您可能希望使用std::vector<char>
而不是原始指针。CString::PCXSTR
复制它。答案 1 :(得分:-2)
使用此功能并解决崩溃问题。
output=(char *) malloc(sData.GetLength());
strcpy(output,sData.GetString() );