基于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; }运行结果: