【问题标题】:How can I check if a MFC CString is null?如何检查 MFC CString 是否为空?
【发布时间】:2016-02-26 16:49:57
【问题描述】:

我想检查 MFC CString 是否为空。有没有办法做到这一点?

PS:我想检查它是否为空,而不是它是否为空。

CString m_strName;

【问题讨论】:

  • MFC CString 不能为空
  • 听起来像是 XY 问题。
  • 我们不知道 tokres 是什么。我们也不知道您安装了哪种可视化工具。如发布的那样,该问题没有包含足够的信息来回答它。
  • 您的tokres 似乎没有正确初始化。这就是为什么所有班级成员都非常垃圾的原因。您应该发布整个代码。所以我们可以帮助你。
  • @IInspectable 是的,它甚至可能是一个指向 char 的简单指针。

标签: c++ visual-c++ mfc c-strings


【解决方案1】:

由于CString类模板的内部布局1),存储的指针永远不能是NULL

CString 类模板有一个类成员:m_pszData。该成员不仅包含字符串数据,还包含附加信息(如字符串长度、引用计数、缓冲区容量等;参见CStringData)。此附加信息存储在存储指针的左侧。两个部分(字符串数据和字符缓冲区)都必须分配在单个内存块中,因为只有一个指针可以引用两者。由于字符串数据总是需要在那里,m_pszData 永远不能是NULL


1)CString 是特定 CStringT 模板实例化的 typedef。 CStringT 本身派生自 CSimpleStringT 类模板。

【讨论】:

    【解决方案2】:

    CString 对象永远不会是 NULL。与char*wchar*(可以是NULL)不同,作为指针的CString 对象的内部缓冲区始终指向数据。对于给定的CString 对象,您只能使用CString::IsEmpty() 来区分它是否为空。

    出于同样的原因,LPCTSTR 转换运算符永远不会返回 NULL

    【讨论】:

    • 好的,但在 Visual Studio 的调试中,cstring 的值为空。我无法用 IsEmpty 检查它(它崩溃,因为它无法检索长度)。
    • 显示您的代码 sn-p。仅当您的对象已被销毁或未初始化时才有可能。
    • 我添加了一张图片。它尚未初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2014-08-23
    • 2017-11-15
    • 2020-05-29
    • 2018-04-02
    • 2016-04-05
    相关资源
    最近更新 更多