CString编辑MFC中的控件

时间:2014-12-22 18:36:13

标签: c++ vector mfc cstring

所以我正在将.txt文件中的数据检索到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;

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

2 个答案:

答案 0 :(得分:1)

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

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

并继续执行其他std::string变量。

答案 1 :(得分:1)

_T宏将创建wchar_t字符串或char字符串,具体取决于VS项目的charset设置。为了将std::string(基于字符的)格式化为其中之一,您必须使用正确的转换。 Microsoft发布了对#&#34; normal&#34; printf() - 许多函数支持的样式语法:使用%ls为char字符串插入wchar_t字符串和%hs

注意:

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