在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"