如何从字符数组创建 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::stringCString 可以是任何东西,例如由您的代码库中的同事编写的类。 //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”的构造函数::CStringT' 被声明为'显式' 我非常怀疑微软会改变版本之间的显式性,因为它会破坏很多现有的代码。此外,文档 (msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx) 清楚地表明构造函数不是显式的。您确定没有尝试编译为 Unicode,同时仍将 char const * 作为参数传递(这确实会触发显式的非 TCHAR 构造函数)? @avakar - 我的立场是正确的。我已经接受了该项目的默认设置,它正在制作“const char *”unicode,当更改为非 unicode 时,它​​会按照您的描述工作(编译时没有错误)。【参考方案3】:
CString cs;
cs = buf;

log.LogMethod(cs)

【讨论】:

以上是关于如何从字符数组创建 CString?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中从二维矩形字符数组的一行创建字符串?

如何删除最后一个字符(从数组创建字符串时的逗号)? [复制]

如何从包含科学记数法的字符串创建一个 numpy 数组

C ++测试cstring数组中的特殊字符

如何创建从 MATLAB 中的结构中提取的值的字符串数组?

如何使用 web_sys 从 Rust 创建一个 JS 字符串数组?