请问在这里sprintf的用法
答案:1 悬赏:0 手机版
解决时间 2021-11-16 19:09
- 提问者网友:呐年旧曙光
- 2021-11-16 15:11
请问在这里sprintf的用法
最佳答案
- 五星知识达人网友:孤老序
- 2021-11-16 15:34
由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf比printf有用得多。
sprintf是个变参函数,定义如下:int sprintf( char *buffer, const char *format [,argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。而它的
1. 格式化数字字符串
sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代itoa。如:
//把整数123打印成一个字符串保存在s中。
sprintf(s,"%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s,"%8d%8d", 123, 4567); //产生:" 123 4567"
当然也可以左对齐:
sprintf(s,"%-8d%8d", 123, 4567); //产生:"123 4567"
也可以按照16进制打印:
sprintf(s,"%8x", 4567); //小写16进制,宽度占8个位置,右对齐
2. 控制浮点数打印格式
浮点数的打印和格式控制是sprintf的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6位数字,比如:
sprintf(s,"%f", 3.1415926); //产生"3.141593"
希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m表示打印的宽度,n表示小数点后的位数。比如:
sprintf(s,"%10.3f",3.1415626); //产生:" 3.142"
sprintf(s,"%-10.3f",3.1415626); //产生:"3.142 "
sprintf(s,"%.3f", 3.1415626);//不指定总宽度,产生:"3.142"
3. 连接字符串
sprintf的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:
char* who ="I";
char* whom ="CSDN";
sprintf(s,"%s love %s.", who, whom); //产生:"I love CSDN. "
4. 打印地址信息
有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:
sprintf(s,"%u", &i);
不过通常人们还是喜欢使用16进制而不是10进制来显示一个地址:
sprintf(s,"%08X", &i);
然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:
sprintf(s,"%p", &i);
我觉得它实际上就相当于:
sprintf(s,"%0*x", 2 * sizeof(void *), &i);
5. 利用sprintf的返回值
较少有人注意printf/sprintf函数的返回值,但有时它却是有用的,spritnf返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf调用结束以后,你无须再调用一次strlen便已经知道了结果字符串的长度。如:
int len =sprintf(s, "%d", i);
对于正整数来说,len便等于整数i的10进制位数。
sprintf是个变参函数,定义如下:int sprintf( char *buffer, const char *format [,argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。而它的
1. 格式化数字字符串
sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf在大多数场合可以替代itoa。如:
//把整数123打印成一个字符串保存在s中。
sprintf(s,"%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s,"%8d%8d", 123, 4567); //产生:" 123 4567"
当然也可以左对齐:
sprintf(s,"%-8d%8d", 123, 4567); //产生:"123 4567"
也可以按照16进制打印:
sprintf(s,"%8x", 4567); //小写16进制,宽度占8个位置,右对齐
2. 控制浮点数打印格式
浮点数的打印和格式控制是sprintf的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后6位数字,比如:
sprintf(s,"%f", 3.1415926); //产生"3.141593"
希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m表示打印的宽度,n表示小数点后的位数。比如:
sprintf(s,"%10.3f",3.1415626); //产生:" 3.142"
sprintf(s,"%-10.3f",3.1415626); //产生:"3.142 "
sprintf(s,"%.3f", 3.1415626);//不指定总宽度,产生:"3.142"
3. 连接字符串
sprintf的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:
char* who ="I";
char* whom ="CSDN";
sprintf(s,"%s love %s.", who, whom); //产生:"I love CSDN. "
4. 打印地址信息
有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:
sprintf(s,"%u", &i);
不过通常人们还是喜欢使用16进制而不是10进制来显示一个地址:
sprintf(s,"%08X", &i);
然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:
sprintf(s,"%p", &i);
我觉得它实际上就相当于:
sprintf(s,"%0*x", 2 * sizeof(void *), &i);
5. 利用sprintf的返回值
较少有人注意printf/sprintf函数的返回值,但有时它却是有用的,spritnf返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf调用结束以后,你无须再调用一次strlen便已经知道了结果字符串的长度。如:
int len =sprintf(s, "%d", i);
对于正整数来说,len便等于整数i的10进制位数。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯