sprintf、snprintf、scanf、sscanf等常用的格式化输入输出

在sprintf中:将xxx类型转成字符串类型,并保存到目标缓冲区

1、sprintf(s, “%d”, value);  //int value = 100,以字符串"100"存储在s中,即s = {'1','0','0',\0}

2、sprintf(s, “%s”, buff);     //char buff[256] = "abcd",类似字符串复制效果

3、sprintf(s, “%02x”, value);  //其中2表示打印宽度,0表示不够宽度补0,x表示hex显示,并以小写字母(%02X,则大写字母显示),如int value = 0x2A,则 s = {'2', 'a', \0};

4、sprintf(s, “%10.3f”, value); //10表示打印宽度,3表示小数点后几位;如float value = 3.1415626,则 s = {'3', '.', '1', '4', '1', \0};

注意:snprintf 限制写入长度,防止数据写溢出,更安全

在sscanf中:将从字符串取出指定格式类型的值;(通常用sscanf)

1、sscanf("12345abcd", %s, buff);  //即将字符串读出,放到buff中

2、sscanf("12345abcd", %4s, buff);  //即将前4个字符串读出,放到buff中

3、sscanf("2024/8/23  17:44:23", %d/%d/%d  %d:%d:%d, &year, &mon, &day, &hour, &min, &sec);    //即得到年月日时分秒的具体值

4、sscanf("1234abcd", "%*d%s", buff);  //%*d表示跳过十进制类型数字,不读取,即buff = "abcd"

5、sscanf("hello  world", "%*s%s", buff);  //%*s表示跳过连续字符串,不读取,即buff = "world"

6、sscanf("123hello", "%[^a-z]", buff);  //%[^a-z],取直到遇到a-z的小写字母为止,即buff = "123"

7、sscanf("hello1234", "%[^0-9]", buff);  //%[^0-9],取直到遇到0-9为止,即buff = "hello"

8、sscanf("http://xxx", "http://%s", buff);  //取xxx到buff中

9、sscanf("http://xxx", "%*[^:]://%s", buff); //[^:]即取到:(http),前面加*即跳过或非取到:(非http),://%s即从//后开始取xxx;即取xxx到buff中

10、%s、%d 、so on...的%读取原理:从头光标位置开始往后读(可以过滤前导空格符,但不能过滤常规的字符),从读到第一个指定格式字符开始,到读到非指定格式字符为止。

sscanf(" 123hello world", "%d", &num);  //自动过滤前导空格符,读取到num = 123

sscanf(" hello world", "%s", buff);   //自动过滤前导空格符,读取到buff = "hello"

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值