如何从字符数组创建 CString?
Posted
技术标签:
【中文标题】如何从字符数组创建 CString?【英文标题】:How to create a CString from an array of chars? 【发布时间】:2010-01-14 15:45:07 【问题描述】:需要使用下面的LogMethod()来记录buf的内容,问题是 LogMethos 只接受“Const CString&”
char buf[1024];
strcpy(buf, cErrorMsg);
// need to pass to LogMethod "buf" how do i do that?
log.LogMethod(const CString &);
比 版本
反转
【问题讨论】:
什么是CString
?你指的是ATL/MFC吗?在 C++ 中,标准字符串是std::string
。 CString
可以是任何东西,例如由您的代码库中的同事编写的类。
//log.LogDebug(CString(buf)); //log.LogDebug(buf); //str = buf; //log.LogDebug(str);上面的代码都没有工作......
那么问题出在其他地方。向我们展示LogMethod
的代码。
我使用的 CString 来自我使用 VS6 的 MFC 类
你是对的!问题出在我的 LogMethod 类中 谢谢大家的帮助
【参考方案1】:
如果您在谈论 MFC CString
,据我所知,它应该有一个采用 TCHAR const *
的非显式构造函数。换句话说,以下应该可以工作。
log.LogMethod(buf);
如果没有,请发布错误消息。
【讨论】:
【参考方案2】:log.LogMethod(CString(buf));
这将避免编译器不会使用适当的构造函数自动创建 CString 对象的问题,因为参数是一个引用(如果参数是“普通”CString 则会出现)。
【讨论】:
参数是CString
还是CString const &
没有区别,两种情况都会进行转换。在后一种情况下,将创建一个临时对象并将其绑定到引用。
这在一般转换情况下是正确的,但是对于 CString 这不是正确的,因为构造函数(接受 char*)已被声明为显式,除非我弄错了,否则会保留编译器从能够自动选择它进行此类转换。也就是说,当 CString& 为 const 时,它在 VS6(未标记显式)中确实有效,但在 VS2005 中无效原因:无法从“const char [5]”转换为“const CString”类“ATL”的构造函数::CStringTchar const *
作为参数传递(这确实会触发显式的非 TCHAR 构造函数)?
@avakar - 我的立场是正确的。我已经接受了该项目的默认设置,它正在制作“const char *”unicode,当更改为非 unicode 时,它会按照您的描述工作(编译时没有错误)。【参考方案3】:
CString cs;
cs = buf;
log.LogMethod(cs)
【讨论】:
以上是关于如何从字符数组创建 CString?的主要内容,如果未能解决你的问题,请参考以下文章