str.Format 错误 Buffer too small
2013-05-21 16:48
288 查看
str.Format 错误 Buffer too small
Format中的参数为m_strFBL字符串本身,我估计是Format在内部根据格式化参数列表会对字符串本身的内存空间进行重新分配,而如果直接采用字符串本身作为参数传入的话,这个过程中就会造成内存的冲突,而这个冲突是无法预见的,查看了下msdn,微软也作了相应的注释:
The call will fail if the string object itself is offered as a parameter to Format. For example, the following code:
CString str = "Some Data";
str.Format("%d%d", str, 123); //Attention: str is also used in the parameter list.
will cause unpredictable results.
所以为了避免这种无法预见的问题,我们最好不要采取将字符串本身作为参数作为Format的参数,可以另外定义一个CString变量:
CString str;
str.Format(Format("%s(放大约%d倍)", m_strFBL, m_nfbl / m_nScreenDPI);
这样问题就解决了。
或者是使用一个临时字符串
CString output;
CString tmp;
tmp.Format("设备描述:%s",it->desc);
output += tmp;
而直接使用 output.Format("%s****",output,it->desc) 这样随时不知道什么时候会出错.
使用注释里面的方法iterator 指针来遍历输出, 还是会提示buffer too small 不知道为什么, 换成一般的for循环就没有问题
Format中的参数为m_strFBL字符串本身,我估计是Format在内部根据格式化参数列表会对字符串本身的内存空间进行重新分配,而如果直接采用字符串本身作为参数传入的话,这个过程中就会造成内存的冲突,而这个冲突是无法预见的,查看了下msdn,微软也作了相应的注释:
The call will fail if the string object itself is offered as a parameter to Format. For example, the following code:
CString str = "Some Data";
str.Format("%d%d", str, 123); //Attention: str is also used in the parameter list.
will cause unpredictable results.
所以为了避免这种无法预见的问题,我们最好不要采取将字符串本身作为参数作为Format的参数,可以另外定义一个CString变量:
CString str;
str.Format(Format("%s(放大约%d倍)", m_strFBL, m_nfbl / m_nScreenDPI);
这样问题就解决了。
或者是使用一个临时字符串
CString output;
CString tmp;
tmp.Format("设备描述:%s",it->desc);
output += tmp;
而直接使用 output.Format("%s****",output,it->desc) 这样随时不知道什么时候会出错.
使用注释里面的方法iterator 指针来遍历输出, 还是会提示buffer too small 不知道为什么, 换成一般的for循环就没有问题
CString output ; int size = m_NicInfo.size(); output.Format(_T("共%d块网卡\r\n"),size); //VE_NicINFO_IT it = this->m_NicInfo.begin(); //for(; it != m_NicInfo.end(); ++it){ // CString tmp; // tmp.Format(_T("%s网卡GUID:%s\r\n"),tmp,it->NicGUID); // output += tmp; // tmp.Format(_T("%s网卡描述:%s\r\n"),tmp,it->NicDesc); // output += tmp; // tmp.Format(_T("%s网卡名称:%s\r\n"),tmp,it->NicName); // output += tmp; // tmp.Format(_T("%s网卡注册表中INDEX:%s\r\n"),tmp,it->NicClassIndex); // output += tmp; //} for(int pos = 0; pos < size ; pos++){ CString tmp; tmp.Format(_T("网卡GUID:%s\r\n"),m_NicInfo.at(pos).NicGUID); output += tmp; tmp.Format(_T("网卡描述:%s\r\n"),m_NicInfo.at(pos).NicDesc); output += tmp; tmp.Format(_T("网卡名称:%s\r\n"),m_NicInfo.at(pos).NicName); output += tmp; tmp.Format(_T("网卡注册表中INDEX:%s\r\n"),m_NicInfo.at(pos).NicClassIndex); output += tmp; } writeLog(output);
相关文章推荐
- VC str.Format 错误 Buffer too small
- CFileDialog打开多个文件失败 返回错误 FNERR_BUFFERTOOSMALL
- CFileDialog打开多个文件失败 返回错误 FNERR_BUFFERTOOSMALL
- PHP调用Oracle存储过程时的错误:ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- VC程序提示 Expression:("Buffer too small",0) 错误
- VC程序提示 Expression:("Buffer too small",0) 错误
- CString.Format调用失败另一例(buffer too small vsprintf.c Line:244)
- Python笔记002——错误TypeError: 'str' does not support the buffer interface
- ORACLE 函数处理的数据返回值过长 character string buffer too small , WMSYS.WM_CONCAT
- Apple Mach-O (Id) Error ios编译错误(file too small file)
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
- strcpy_s Buffer is too small 出错根本原因
- make menuconfig显示错误“Your display is too small to run Menuconfig!”
- 关于sprintf_s,弹出Expression:(“Buffer too small”,0)
- ORACLE 函数处理的数据返回值过长 character string buffer too small
- Buffer too small
- make menuconfig显示错误“Your display is too small to run Menuconfig!”
- 在运行ocrconfig replace ocrmirror命令时出现PROT-22: Storage too small错误
- How to solve (Buffer too Small".0) problem?
- Buffer is too small