在尝试使用strcpy时看到应用程序崩溃

时间:2014-08-27 05:32:23

标签: c++ c dll

我们有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();
}
然而,我仍然看到崩溃失败。你有没有人建议我的修复不正确。

2 个答案:

答案 0 :(得分:0)

该代码可能存在一些问题:

  1. 永远不要使用strcpy,因为它很容易溢出目标缓冲区。在您的情况下,您知道要复制的字符串的长度,没有理由不使用memcpy,例如memcpy(output, p, strLen)
  2. 这是C ++代码,但缓冲区是使用malloc分配的。此代码的调用者可能会意外地使用free[]来解除分配。您可能希望使用std::vector<char>而不是原始指针。
  3. 您可以直接访问基础C字符串,而无需使用CString::PCXSTR复制它。

答案 1 :(得分:-2)

使用此功能并解决崩溃问题。

output=(char *) malloc(sData.GetLength());
strcpy(output,sData.GetString() );