【问题标题】:CString to Edit Control in MFCCString 在 MFC 中编辑控件
【发布时间】:2014-12-22 18:36:13
【问题描述】:

所以我正在从 .txt 文件中检索 so 数据到 myclass(类),包括

public:
vector<int> ID
vector<string> name
vector<string> add

但是当我尝试访问它们以在 MFC dlg 的编辑框中显示它们时,它只会将这个返回到框中:

ID: 1
Name: (jibberish)
address: (jiberish)
ID: 2
Name: (jibberish)
address: (jiberish)
etc...

for循环中编辑控件框使用的代码

int s1;    
CString s2, s3;
s1.Format(_T("\r\nID: %d"),myclass.ID[i]);
s2.Format(_T("\r\nName: %s"),myclass.name[i]);
s3.Format(_T("\r\nAddress: %s"),myclass.add[i]);
Edi_box += s1 + s2 + s3;

所以它读取整数向量而不是字符串向量

【问题讨论】:

    标签: c++ vector mfc cstring


    【解决方案1】:

    _T 宏将根据 VS 项目的字符集设置创建 wchar_t 字符串或 char 字符串。为了将std::string(基于字符的)格式化为其中之一,您必须使用正确的转换。 Microsoft 为许多函数支持的“普通”printf() 样式语法提供了一个扩展:使用 %ls 插入 wchar_t 字符串,使用 %hs 插入 char 字符串。

    注意事项:

    • 从 wchar_t 到 char 的转换可能会失败,因此除非您已经有限制输入,否则不要期望那里的质量结果。
    • 您不能通过省略号传递任何类类型对象,因此您需要来自 c_str() 函数的 C 风格、以 NUL 结尾的字符串。
    • 如果您有多个向量,其中每个元素对应于另一个元素的一个元素,请使用带有结构的单个向量,这会使您的代码更加清晰。
    • 将行尾字符(“\r\n”)放在end。 ;)

    【讨论】:

    • 这很好,但只是与 .c_str() 结合非常感谢
    • 很高兴我能帮上忙,@FranciscoMatias。实际上我很惊讶编译器没有告诉你,因为通过省略号传递任何类对象是不正确的——也许你禁用了相应的警告?
    【解决方案2】:

    您不能(或至少不应该)使用%s 格式化std::string。试试这个:

    s2.Format( _T("\r\nName: %s"), myclass.name[i].c_str() );
    

    对其他 std::string 变量进行同样的操作。

    【讨论】:

    • 因为Format 的可变参数列表,它无法判断你什么时候用错了。大多数无法通过原始std::string 的地方,如果您尝试,您会收到错误消息,但这里不会。
    • 我已经试过了,但是我有更多的乱码,而不是 1 个乱码
    • 将 .c_str 与 %hs 结合使用,它终于可以工作了。非常感谢你们俩
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多