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 会自动取文本指针
②对于数值型变量 ,例如 整数 小数 长整数 等 则需 取变量地址 后传入
③对于文本型变量,必须其他申请好内存,且保证内存长度足够存储格式后的文本
以下给出案例
再给出一个 不支持 文本型的写法 ,优点是 对于数值型变量 无需 调用 取变量地址 使用时直接提供变量名即可
例子
无恒有生 Time: 2022-06-20 14:40:00
评论ID
赞一个
利快云编程教育平台 Time: 2022-06-20 15:20:58
评论ID
到底老哥这个文章是个干货
就是帅气 Time: 2022-06-20 15:21:59
评论ID
受教了 非常好的博客
199****9988 Time: 2022-06-20 15:22:43
评论ID
学习了
Time: 2022-06-20 22:15:00
评论ID
收藏了,谢谢分享~~