• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

技术天地

一种std::string的格式化办法

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/2019/0907/631.html

 
运用规范库中string的益处是不用手机App外包本人管理内存,很多场景下经过sprintf来格式化字符串时也存在不能预先声明char数组长度的问题,需求本人来管理字符串内存的申请与释放。而规范库std中并没有相似CString::Format()这样的接口,很多文章中提到应用istream、ostream一类的来格式化字符串则复杂繁琐。因而考虑后决议本人写一个格式化std::string的通用函数:
 
#include 
std::string & std_string_format(std::string & _str, const char * _Format, ...){
va_list marker = NULL;
va_start(marker, _Format);
int num_of_chars = _vscprintf(_Format, marker);
if (num_of_chars > _str.capacity()){
_str.resize(num_of_chars + 1);
}
vsprintf((char *) _str.c_str(), _Format, marker);
va_end(marker);
return _str;
}
应用App开发培训这个函数能够很轻松地停止string字符串的格式化了,而且十分简约!
 
 
 
2016-05-24 发现按上述办法设置std::string后,固然字符内容是正确的,但string的size属性没有对应改正来,所以修正为:
 
std::string & std_string_format(std::string & _str, const char * _Format, ...) {
std::string tmp;
va_list marker = NULL;
va_start(marker, _Format);
size_t num_of_chars = _vscprintf(_Format, marker);
if (num_of_chars > tmp.capacity()) {
tmp.resize(num_of_chars + 1);
}
vsprintf_s((char *)tmp.data(), tmp.capacity(), _Format, marker);
va_end(marker);
_str = tmp.c_str();
return _str;
}
 

上篇:上一篇:MFC ListControl完成复选框全选、反选
下篇:下一篇:C++中文件按行读取和逐词读取