将宏作为CString引用传递

时间:2018-12-12 15:27:01

标签: c++ visual-c++ atl c-strings msdn

我正在分析应用程序崩溃,并且怀疑我当前的方法(下面粘贴的代码中的方法1)可能导致崩溃,但不确定。 我已经在代码下方粘贴了一些参考。内部崩溃无法复制,也没有转储。

#define SAMPLE_STRING L"Hello world"

class CFoo
{
    std::map <CString, CString> m_map;
public:
    void SetMyString(__in const CString&  csParam)
    {
        CString csKey(L"Mykey");
        m_map[csKey] = csParam;
    }
};
int main()
{
    //approach 1
    CFoo obj;
    obj.SetMyString(SAMPLE_STRING);


    //approach 2
    CFoo obj;
    CString csMystr(SAMPLE_STRING);
    obj.SetMyString(csMystr);

}

以下是我的问题:

  1. 我们是否可以将宏作为CString引用传递,还是应该使用该宏创建一个CString初始化,然后传递CString的引用?
  2. 以上两种方法有什么区别?
  3. 方法1会使应用程序崩溃吗?如果可以的话,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

正如每个人所说,问题的根源在不同的地方。感谢大家的快速响应,问题得以重现,并帮助修复了崩溃问题。问题的根源是,正在尝试将包含英文和日文字符的文件读取到CStringA变量中,同时尝试降低它的崩溃率。从字面上看,日语字符在CStringA中转换为垃圾。 CString makelower是问题的根源。