CString转换到char*以及CString类下的函数sscanf_s用法

第一部分  CString转换到char*方法一:如果你的项目使用的是多字节字符集(项目-配置属性-常规-字符集),那么 CString与char*是可以直接转换的,可以用=来做值传递,在函数之间的作参数传递也是没有区别的。那么也就是说,如果你的项目使用的是Unicode字符集编程,那么最简单的方法就是改用多字节字符集;下面插入一点多字节字符集与Unicode字符集的概念,与解决问题无关。多字节字...
摘要由CSDN通过智能技术生成

第一部分  CString转换到char*

方法一:如果你的项目使用的是多字节字符集(项目-配置属性-常规-字符集),那么 CString与char*是可以直接转换的,可以用=来做值传递,在函数之间的作参数传递也是没有区别的。那么也就是说,如果你的项目使用的是Unicode字符集编程,那么最简单的方法就是改用多字节字符集;

下面插入一点多字节字符集与Unicode字符集的概念,与解决问题无关。多字节字符集英文简写为MBCS,一个英文字符1个字节8位,一个中文字符2个字节2*8位,它的弊病就是占用一个字节和两个字节的各国语言混合在一起的时候使用不便,如字符串“你好 kjh”,字符数为5,而字节数是8(最后还有一个\0),对于用++或--运算符来遍历字符串的程序员来说简直是噩梦。Unicode通常用两个字节表示一个字符Unicode是后出来的东西,现在的数据类型以及API函数都分为多字节字符版和宽字符版本,Unicode的制定,国际组织想要容纳世界上所有文字和符号的字符编码方案。

方法二:在使用Unicode字符集时,既然CString无法直接转换到char*(截止本帖子发出笔者没有找到很好的转换方法),那么就这样处理:先将CString转换到string,再将string转换为char*;格式如下

CString a=_T("good123");

string b(CW2A(a.GetString()));//以上是CString转换到string,那么至此b的内容就是good123

char *c=b.c_str();//至此c的内容就是good123,char类型哦


第二部分  函数sscanf_s用法

const char *a="我爱你1994CHINA";

int m_NumYear;

sscanf_s(charTemp, "我爱你%dCHINA", &m_NumYear;//取出1994整型数字存进m_NumYear

我个人使用sscanf_s时一定会将函数第二个参数按照待取字符串的顺序填满,或者偷懒一点不填最后的CHINA,但我要取的1994数字前面的“我爱你"绝对不能省,因为函数sscanf_s是从字符串的最左边开始遍历的,第二个参数的第一个字符与待取字符串的第一个字符一旦对不上,就会立刻返回0停止遍历;

sscanf_s类似sscanf函数,在其他地方摘录了一些关于过滤器的格式:

1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中) 
  2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。 
  3、width表示读取宽度。 
  4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。 
  5、type :这就很多了,就是%s,%d之类。 

  6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值 

应用实例

(以下摘自百度百科https://baike.baidu.com/item/sscanf/10551550?fr=aladdin)

1、一般用法
1
2
3
char  buf[512] = ;
sscanf ( "123456 " "%s" , buf);
printf
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值