当前位置:首页 > 大全 >

浮点型格式符(代表浮点数的格式符)

来源:原点资讯(www.yd166.com)时间:2022-12-20 05:24:38作者:YD166手机阅读>>

将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。

由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf 比 printf 有用得多。

sprintf是个变参函数,定义如下:

int sprintf( char *buffer, const char *format [, argument] … );

除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。

printf 和 sprintf 都使用格式化字符串来指 定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。

1、格式化数字字符串

sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa。如:

// 把整数123打印成一个字符串保存在s中。

sprintf(s, "%d", 123); // 产生"123"

2、控制浮点数打印格式

浮点数的打印和格式控制是 sprintf 的又一大常用功能,浮点数使用格式符“%f”控制,默认保留小数点后6位数字,比如:

sprintf(s, "%f", 3.1415926); // 产生 "3.141593"

但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:“%m.nf”格式,其中m表示打印的宽度,n表示小数点后的位数。比如:

sprintf(s, ".3f", 3.1415626); // 产生:" 3.142″

3、连接字符串

sprintf的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代 strcat,但 sprintf 能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:

char *who = "I";

char *whom = "52PHP";

sprintf(s, "%s love %s.", who, whom); // 产生:"I love 52PHP. "

打印整数和浮点数时可以指定宽度:

char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};

char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};

sprintf(s, "%.7s%.7s", a1, a2); // 产生:"ABCDEFGHIJKLMN"

或者

sprintf(s, "%.*s%.*s", 7, a1, 7, a2); or

sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);

4、利用sprintf的返回值

spritnf 返回了本次函数调用最终打印到字符缓冲区中的字符数目

int len = sprintf(s, "%d", i);

二、snprintf() 详解

函数原型:

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

函数说明:最多从源串中拷贝 n-1 个字符到目标串中,然后再在后面加一个 '\0'。所以如果目标串的大小为 n 的话,将不会溢出。

函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。

1、推荐的用法

#include <stdio.h>

int main(int argc, char **argv)

{

char str[10] = {0,};

snprintf(str, sizeof(str), "0123456789012345678");

printf("str=%s\n", str);

return 0;

}

输出:

str=012345678

2、snprintf() 函数返回值的测试:

#include <stdio.h>

#include <string.h>

int main(int argc, char **argv)

{

char str1[10] = {0,};

char str2[10] = {0,};

int ret1 = 0, ret2 = 0;

ret1 = snprintf(str1, sizeof(str1), "%s", "abc");

ret2 = snprintf(str2, 4, "%s", "aaabbbccc");

printf("aaabbbccc length=%d\n", strlen("aaabbbccc"));

printf("str1=%s,ret1=%d\n", str1, ret1);

printf("str2=%s,ret2=%d\n", str2, ret2);

return 0;

}

输出:

aaabbbccc length=9

str1=abc,ret1=3

str2=aaa,ret2=9

特别注意:

snprintf() 的返回值是欲写入的字符串长度,而不是实际写入的字符串度。如:

#include <stdio.h>

int main(int argc, char **argv)

{

char test[8];

int ret = snprintf(test, 5, "1234567890");

printf("%d|%s\n", ret, test);

return 0;

}

输出:

10|1234

栏目热文

挖矿送矿池(挖矿矿池选择)

挖矿送矿池(挖矿矿池选择)

9月20日晚间,芯片厂商英伟达创始人兼CEO黄仁勋主持的GTC秋季开发者大会拉开帷幕,会上,万众瞩目的40系显卡也正式曝...

2022-12-18 12:57:13查看全文 >>

双闭环控制百度百科(双闭环系统图)

双闭环控制百度百科(双闭环系统图)

TAKTVOLL 索吉瑞科技 欧盟CE认证ES-200PK是一款具有8种工作模式的多功能高频手术设备,其中单极电切模式3...

2022-12-08 13:08:05查看全文 >>

麻豆传媒兄妹蕉谈

麻豆传媒兄妹蕉谈

2021年1月,一位姓孙的神秘人,主动找到了麻豆传媒的负责人。对剧本和片酬进行详细沟通后,先后在广东、四川等地组建了3个...

2022-12-17 17:30:38查看全文 >>

现代美式风格装修案例(美式和欧式哪个更耐看)

现代美式风格装修案例(美式和欧式哪个更耐看)

现代美式风格,是一种集了成熟稳重与清新浪漫一体的设计,在这套127平米的房子中,就是采取现代美式风格为装修基调,整体现代...

2022-12-21 03:39:29查看全文 >>

隆回规划图2030(隆回城南规划图)

隆回规划图2030(隆回城南规划图)

漫步村级公园,宛如画中游,村舍青烟相映成趣;高树低柳俯仰生姿;青山如黛,绿草如茵…6月30日,在隆回县荷香桥镇九牛坳村,...

2023-06-20 22:38:07查看全文 >>

小学生写的关于冬天的现代诗(小学生自编描写冬天的现代诗简短)

小学生写的关于冬天的现代诗(小学生自编描写冬天的现代诗简短)

你写冬天,就不能只写冬天你要写晨霜,写寒露写满山的萧瑟漫野的枯黄~~~~写千里冰封写北风呼啸写孤零零的鸟在寂静中鸣叫~~...

2022-12-16 15:14:13查看全文 >>

有理数计算题500道过程及答案(200道有理数计算题过程和答案)

有理数计算题500道过程及答案(200道有理数计算题过程和答案)

每道题都经过老师团队的精挑细选,包含常见题型,易错题型,覆盖了有理数运算的重点难点。七年级的学生,很多刚接触负数的运算,...

2022-12-25 05:45:40查看全文 >>

吉林市卫视主持人名单(吉林卫视历年的女主持人)

吉林市卫视主持人名单(吉林卫视历年的女主持人)

点击视频 看看她究竟是谁 她落落大方、才华横溢她优雅端庄、情感细腻她恪守职业、关注民生她有着新闻人的热血又怀揣着...

2023-09-02 04:54:19查看全文 >>

猫是十二生肖中的动物吗(猫和十二生肖哪个比较像)

猫是十二生肖中的动物吗(猫和十二生肖哪个比较像)

很多事情我们习以为常,但却不知来源。比如为什么男装纽扣在右而女装在左?为什么是上厕所下厨房?十二生肖到底为什么没有猫?羊...

2023-01-01 13:26:38查看全文 >>

文档排行