我在代码中使用wcstombs_sCString转换为char*。这是代码:

  AddItemToListIncludeSubFolder(CString FolderPath, CString Parent)
  {
    char szInputPath[1024];

    memset(szInputPath,1024,'\0');
    size_t CharactersConverted=0;

    wcstombs_s(&CharactersConverted, szInputPath, FolderPath.GetLength()+1,
        FolderPath, _TRUNCATE);
  }


有时会引发异常。内存异常。当wcstombs_s太长(例如1024个字符)或我做错了什么时,CString无法工作。

最佳答案

wcstombs_s的第三个参数是输出缓冲区的大小,而不是要转换的字符串的大小。如果FolderPath的长度超过1024个字符,则您正在写内存超出范围,因为wcstombs_s认为它的缓冲区比它大。

尝试以下方法:

wcstombs_s(&CharactersConverted, szInputPath, sizeof(szInputPath),
    FolderPath, _TRUNCATE);

关于c++ - wcstombs_s无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4222804/

10-09 08:46