当前博客:[PC封装]函数swscanf文本转换的另一选择

94 次浏览【转载需注明来源】


int swscanf( const wchar_t *buffer, const wchar_t *format [, argument ] ... );

从宽字符串buffer读取数据并根据参数格式format将它们存储到附加参数给出的位置.


欲封装一个函数,首先必须要知道这个函数的用法(实现的功能),参数个数,参数类型,返回值(及其类型)

swscanf函数的功能举例说明:

假设有一个 文本型变量 ="2020-6-20:昨天是父亲节"   

现在想将这个变量拆开,分别存储到 3个整数变量  和 1个文本型变量  

一般情况你们应该是通过 诸如 取文本左边  取文本中间 取文本右边 来分割 ,这种方法显得代码非常繁琐

那么这种情况就可以使用本案例的swscanf函数


swscanf函数是一个参数个数可拓展的函数,一般情况参数个数不得小于3个 

第一个参数是 const wchar_t *    本参数是要求输入欲被格式(分割/提取)的文本.  wchar_t是字符,占用2个字节,火山PC文本型就是基于wchar_t包装的类. 在火山里就是  "取文本指针"的返回值 ,嵌入式写法为 @<文本>.GetText() .

第二个参数是const wchar_t *    , 本参数是要求输入 格式参数一且具有特定规则的文本   . 例如 %d  就是格式为整数  %s 格式为文本  更多的例子可以参考火山里的函数"加入格式文本"的参数备注 

扩展参数 要求输入参数二内对应的格式文本对应的类型的变量的变量地址, 注意 数值型变量是变量地址,而文本型则是传递文本指针 . 可拓展的参数个数 与 参数二 的 %的个数保持一致  且 顺序对应的类型也要一致.  

-------------------

由于参数个数不定 ,那么火山里封装则只能选择 嵌入式方法  

首先来个保守的写法 

@嵌入式方法   "req_str_param_text_pointer = true"   //这个是将所有的文本型自动传递文本指针 ,所以上面的.GetText() 都可以省略不写 .

注意:

①对于文本型变量,可直接传递文本变量 ,req_str_param_text_pointer 会自动取文本指针 

②对于数值型变量 ,例如 整数 小数 长整数  等 则需 取变量地址 后传入

③对于文本型变量,必须其他申请好内存,且保证内存长度足够存储格式后的文本

以下给出案例

 


再给出一个 不支持 文本型的写法 ,优点是 对于数值型变量  无需 调用 取变量地址  使用时直接提供变量名即可

例子

 

 

默认排序
Generic placeholder image
无恒有生 Time: 2022-06-20 14:40:00

赞一个

Generic placeholder image
利快云编程教育平台 Time: 2022-06-20 15:20:58

到底老哥这个文章是个干货

Generic placeholder image
就是帅气 Time: 2022-06-20 15:21:59

受教了 非常好的博客

Generic placeholder image
199****9988 Time: 2022-06-20 15:22:43

学习了

Generic placeholder image
  Time: 2022-06-20 22:15:00

收藏了,谢谢分享~~


[PC封装]函数swscanf文本转换的另一选择