标准IO库函数 ssanf和sprintf

->格式化输入 sscanf

int scanf(const char *format, …);
从标准输入读入信息

int fscanf(FILE *stream,const char *format, …);
从stream指向的文件中读入信息

int sscanf(const char *buf,const char *format, …);

从buf指定的内存区域中读入信息


格式化输入sscanf(例)

1、取指定长度的字符串
char buf[512] = "";
sscanf("123456", "%3s", buf);
printf("%s\n", buf);
结果为:123

2、取到指定字符为止的字符串
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
结果为:123456

3、取仅包含指定字符集的字符串
sscanf("123abcABC", "%[1-9a-z]", buf);
printf("%s\n", buf);
结果为:123abc

4、取到指定字符集为止的字符串
sscanf("123abcABC", "%[^A-Z]", buf);
printf("%s\n", buf);
结果为:123abc

5、取两个字符之间的字符串
sscanf("abc#def@ghi", "%*[^#]#%[^@]", buf);
printf("%s\n", buf);
结果为:def

6、仅保留字符串““hello, world”中的world
sscanf(“hello, world”, "%*s%s", buf);
printf("%s\n", buf);
结果为:world

7、分隔字符串2012:08:18
int a, b, c;
sscanf("2012:08:18", "%d:%d:%d", &a, &b, &c);

8、分隔字符串2012:08:18 -2012:08:18
char buf1[100] = "", buf2[100] = "";
sscanf(“2010:08:18 -2012:08:18”,"%s -%s", buf1, buf2);
sscanf(“2010:08:18 -2012:08:18”,"%[0-9:] -%[0-9:]", buf1, buf2);

二>格式化输出  sprintf

int printf(const char *format, …);

输出到标准输出

int fprintf(FILE *stream,const char *format, …);

输出到文件

int sprintf(char *buf, const char *format, …);

int snprintf(char *buf, size_t n,const char *format, …);

输出到buf指定的内存区域。

注意:
sprintf函数没有指定写入的字符数,可能会造成由buf指向的内存区域溢出。标准I/O库函数



-------------------------------------------------------sscanf----------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>
#include<string.h>
#include<stdlib.h>


int main()
{
    char buf[100]="/mnt/ramdisk/172.0.0.1_19700101022912028_无_无_030_1_0_0.jpg";
    char array[5];
    
    //取buf中的 030

    sscanf(buf,"%*[^_ ]_%*[^_ ]_%*[^_ ]_%*[^_ ]_%[^_ ]",array);// %*[^_ ] _  跳过 _  不要_       %[^_ ] 取到_
    sscanf(buf,"%*[^_ ]_%*[^_ ]_%*[^_ ]_%*[^_ ]_%3s",array);//  %3s 取3个字符
    
    
    printf("******%s\n",array);
    
    return 0;
    
    
    
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值