sscanf,snprintf,sprintf小结

一、sprintf

sprint函数原型为int sprintf(char *str, const char *format, …)。作用是格式化字符串,,具体功能如下所示:

举例如下

char str[256] = { 0 };

int data = 1024;

//将data转换为字符串

sprintf(str,"%d",data);

//获取data的十六进制

sprintf(str,"0x%X",data);

//获取data的八进制

sprintf(str,"0%o",data);

const char *s1 = "Hello";

const char *s2 = "World";

//连接字符串s1和s2

sprintf(str,"%s %s",s1,s2);

二、sscanf函数

int sscanf(const char *str, const char *format, …)

取到指定字符为止的字符串

(1)-: %[A-Z]只读取大写字母(4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s

解析网址的例子如下所示:

const char *s = ":1234";

char protocol[32] = { 0 };

char host[128] = { 0 };

char port[8] = { 0 };

sscanf(s,"%[^:]://%[^:]:%[1-9]",protocol,host,port);

printf("protocol: %s\n",protocol);

printf("host: %s\n",host);

printf("port: %s\n",port);

再比如说解析日历

char* s = “2015.08.14”;

int year, month, day;

sscanf(s, “%d.%d.%d”, &year, &month, &day);

可能还会看到%*[^;];%s,%*c之类的表达式。要注意的事加*表示丢弃的意思

比如说;

const char* s = “Deviceinfo=abcd;Connect=127.0.0.1;Port=6558;UserName=lql;Pwd=123”;

char szUrl[256] = {0};

char szIp[256]={0};

char szPort[256] = {0};

char szUserName[256] = {0};

char szPwd[256] = {0};

strcpy_s(szUrl, sizeof(szUrl) – 1, s);

sscanf(szUrl, “%*[^;];%s”, szUrl);//去掉Deviceinfo=abcd;

sscanf(szUrl, “Connect=%[^;]”, szIp);

sscanf(szUrl, “%*[^;];%s”, szUrl);//去掉Connect=…;

sscanf(szUrl, “Port=%[^;]”, szPort);

sscanf(szUrl, “%*[^;];%s”, szUrl);//去掉Port=…;

sscanf(szUrl, “UserName=%[^;]”, szUserName);

sscanf(szUrl, “%*[^;];%s”, szUrl);//去掉UserName=…;

sscanf(szUrl, “Pwd=%[^;]”, szPwd);

……

再比如说:

scanf(“%d %*c %d”, &a, &b);

如果输入1n2,因为会丢弃掉中间一个字符,所以最终结果是a=1,b=2

如果*放在[]里面就代表通配符了,意思什么字符都会输出的意思。

三、格式化函数对应的安全版本

sprintf sprintf_s, sscanf sscanf_s等等。其实用法和上面说到的事一样的,就是多了一个缓冲区长度的参数。

版权声明:本文为博主原创文章,未经博主允许不得转载。

那绿叶上的水珠,是思念的泪滴。

sscanf,snprintf,sprintf小结

相关文章:

你感兴趣的文章:

标签云: