Fra*_*ani 1 c++ c-strings stdstring c++11
使用CString.Format(),我传给它一个std::map返回std::string给定的时候int.
所以:
CString cStr;
cStr.Format("%s", IntToStdStringMap[1]);
Run Code Online (Sandbox Code Playgroud)
其中,IntToStdStringMap[1]返回一些字符串,我们会说"你好,世界!".问题是每次都不会崩溃.最终,我将收到访问冲突.
为什么会这样?
请记住,将代码更改为以下内容:
CString cStr;
cStr.Format("%s", IntToStdStringMap[1].c_str());
Run Code Online (Sandbox Code Playgroud)
缓解了这个问题.
有任何想法吗?
传递std::string给CString::Format是不对的.来自https://msdn.microsoft.com/en-us/library/aa314327(v=vs.60).aspx:
格式与printf函数的format参数具有相同的形式和功能.
这意味着,当格式说明符为时%s,预期的参数类型char const*不是std::string.
因此,使用
cStr.Format("%s", IntToStdStringMap[1]);
Run Code Online (Sandbox Code Playgroud)
是行为的原因未定义的行为
cStr.Format("%s", IntToStdStringMap[1].c_str());
Run Code Online (Sandbox Code Playgroud)
很明确.
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |