您的位置:首页 > 编程语言 > C语言/C++

基于C++的sprintf函数使用技巧

2016-03-30 18:21 495 查看

参考:http://www.jb51.net/article/37296.htm

一、printf函数和sprintf函数

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

在将各种类型的数据构造成字符串时,printf函数和sprintf函数不同之处在于,前者打印到字符串中,后者则直接在命令行上输出。

二、sprintf函数

2.1 Sprintf函数是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。

2.2 主要功能

把格式化的数据写入某个字符串缓冲区中。
2.3 原型

int sprintf( char *buffer, const char* fformat, [argument]......);
2.4 参数列表

buffer:char型指针,指向将要写入的字符串的缓冲区中;
format:格式化字符串;
[argument]......:可选参数,可以是任何类型的数据。
2.5返回值

返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。

sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。即,如果将“ILOVEYOU”被写入空间足够大的buffer后,函数sprintf 返回8。

三、sprintf函数的用法

见示例:

#include <iostream>
using namespace std;

int main()
{
char s[1024];
cout << "*****************格式化数字字符串******************" << endl << endl;
sprintf(s, "%d", 123); //把整数123 打印成一个字符串保存在s 中。
cout<<"整数sprintf到字符串s中:"<<s<<endl;

//可以指定宽度,不足的左边补空格:
sprintf(s, "%8d%8d", 123,4567); //产生:"     123,    4567"
cout << "左补空格,整数sprintf到字符串s中:" <<s<<endl;

//当然也可以左对齐:
sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
cout <<"左对齐,整数sprintf到字符串s中:"<<s<< endl;

//也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
cout << "16进制打印,右对齐,整数sprintf到字符串s中:" << s << endl;
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
cout << "16进制打印,左对齐,整数sprintf到字符串s中:" << s << endl;

sprintf(s, "%08X", 4567); //产生:"000011D7"
cout << "16进制打印,左边补0,整数sprintf到字符串s中:" << s << endl << endl;

cout << "****************控制浮点数打印格式******************" << endl << endl;
short si = -1;
sprintf(s, "%04X", si);
cout << s << endl;
sprintf(s, "%04X", (unsigned short)si);
cout << s << endl;
sprintf(s, "%f", 3.1415926); //产生"3.141593"

//可以使用:”%m.nf”格式控制打印的宽度和小数位数,其中m 表示打印的宽度,n 表示小数点后的位数
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
cout << "%10.3f:" <<s<< endl;
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
cout << "%-10.3f:" << s << endl;
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"
cout << "%.3f:" << s << endl << endl;

int i = 100;
sprintf(s, "%.2f", i);
cout << "%.2f:" << s << endl;//0.00
sprintf(s, "%.2f", (double)i);
cout << "double %.2f:" << s << endl;

cout << "********************连接字符串*********************" << endl << endl;

char s1[] ="Welcome";
char s2[] = " to ";
char s3[] = "China";
sprintf(s, "%s%s%s.",s1,s2,s3); //产生:“I love CSDN. ”
cout <<"字符串连接:"<<s <<endl;

char *p1 = "To";
char *p2 = " be ";
char *p3 = "number ";
char *p4 = "One";
sprintf(s, "%s%s%s%s", p1, p2, p3, p4);
cout << "指针型字符串连接:"<<s << endl;

system("pause");
return 0;
}
运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: