sprintf 函数用法

#include <iostream>
using namespace std;

int main(){
    char str[50],s[20];
    int n, a=5;
    char b[8]={"abc"};
    n=sprintf(str, "%d  + %s", a, b);
    printf("%s", str);
    cout<<n<<endl; 
n=sprintf(s, "%d", 123);
cout<<s<<endl;
cout<<n<<endl; //产生"123" 可以指定宽度,不足的左边补空格:
n=sprintf(s, "%8d%8d", 123, 4567);
cout<<s<<endl;
cout<<n<<endl; //产生:" 123 4567" 当然也可以左对齐:
n=sprintf(s, "%-8d%8d", 123, 4567);
cout<<s<<endl;
cout<<n<<endl;//产生:"123 4567" 也可以按照16进制打印:
n=sprintf(s, "%8x", 4567);
cout<<s<<endl;
cout<<n<<endl; //小写16进制,宽度占8个位置,右对齐
n=sprintf(s, "%-8X", 4568);
cout<<s<<endl;
cout<<n<<endl;
n=sprintf(s, "%X", 4568);
cout<<s<<endl;
cout<<n<<endl; //大写16进制,宽度占4个位置,左对齐
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142" 注意一个问题,你猜
int i = 100;  
sprintf(s, "%.2f", i);//
cout<<s<<endl;
cout<<n<<endl; 
/*sprintf(s, "%.2f", (double)i); // 错误 i 为double 不可分为float;
cout<<s<<endl;
cout<<n<<endl; */
    system("pause");
    return 0;
}


sprintf 有点类似printf ,只是把字符串输出到了第一个参数中了

n=sprintf(str, "%d  + %s", a, b);

把处理后的结果显示在字符串str中

返回值n是字符串的长度(n可有可无)

利用prinf的格式控制,可以对sprintf处理的结果进行格式控制输出到str中

总的用法 

1.非字符串转字符串

2.链接字符串

3.打印地址信息

如何使用这个函数的核心就是格式控制的技巧

更应该记住的应该是如何进行格式控制输出

而这些格式控制大部分在printf中就直接可以使用的

 


%% 印出百分比符号,不转换。

%c 整数转成对应的 ASCII 字元。

%d 整数转成十进位。

%f 倍精确度数字转成浮点数。

%o 整数转成八进位。

%s 整数转成字符串。

%x 整数转成小写十六进位。

%X 整数转成大写十六进位。

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个位置,右对齐

sprintf(s, "%-8x", 4568); //大写16进制,宽度占8个位置,左对齐


 明白这个是用来处理字符串,生成字符串就可以喽

 

更方便的用法,更加的灵活

sprintf(s, "%.*s%.*s", 7, a1, 7, a2);
或者:
sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);

实际上,前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值,比如:
sprintf(s, "%-*d", 4, 'A'); //产生"65 "
sprintf(s, "%#0*X", 8, 128); //产生"0X000080","#"产生0X
sprintf(s, "%*.*f", 10, 2, 3.1415926); //产生" 3.14"

转载于:https://my.oschina.net/dianpaopao/blog/83040

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值