国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中sprintf使用的方法與printf的區別分析

2020-01-26 15:11:01
字體:
來源:轉載
供稿:網友

本文實例講述了C++中sprintf使用的方法與printf的區別。分享給大家供大家參考。具體分析如下:

首先我們在MSDN看一下printf的原型和sprintf的原型

復制代碼 代碼如下:
int printf( const char *format [, argument]... );


復制代碼 代碼如下:
int sprintf( char *buffer, const char *format [, argument] ... );

從定義來看兩者的功能其實很相似的。

如果你接觸的控制臺的程序較多的話,見到printf的比較多,printf函數打印結果到屏幕上,而sprintf函數可以完成其他數據類型轉換為字符串。
從以下幾點來說明一下

(1)函數的中前兩個參數是固定外,可選參數是任意個,buffer是存放字符串指針或者數組名字,fromat是格式化字符串,只要是printf使用的格式化字符串,在sprintf都可以使用,格式化字符串是該函數的精髓。
(2)首先可以把一個整型數據格式化為字符串。比如:

復制代碼 代碼如下:
char str[20];
int i_arg = 12345;
sprintf(buf,"%-6d",i_arg);

(3)看一個浮點類型的例子。比如:
復制代碼 代碼如下:
char str[20];
double d_arg = 3.1415926;
sprintf(str,"%6.2f",d_arg);

可以控制精度
(4)連接兩個字符串,也可以將多個字符串連接起來,%m.n在字符串的輸出中,m表示寬度,字符串共占的列數;n表示實際的字符數。%m.n在浮點數中,m也表示寬度,n表示小數的位數。比如:
復制代碼 代碼如下:
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};
sprintf(dest,"%.5s%.4s",src1,src2);

也可以動態的截取字符串的某一些字符:
復制代碼 代碼如下:
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};
sprintf(dest,"%.*s%.*s",2,src1,3,src2);

也可以竊取浮點類型的有效位
復制代碼 代碼如下:
sprintf(str,"%*.*",10,4,d_arg);

補充一點,sprintf的返回值就是字符串的字符的個數,也就是strlen(str)的結果,
也可以打印某個參數的地址
復制代碼 代碼如下:
int i=2;
sprintf(str,"%0*x",sizeof(void *),&i);

或者用:
復制代碼 代碼如下:
sprintf(str,"%p",&i);

此外這些都是都是多字節類型(ANSI)的函數,而對于unicode類型的應該使用的相似的函數:

復制代碼 代碼如下:
int wprintf( const wchar_t *format [, argument]... );
 
int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );

用法和上面的很相似的,就是類型不同而已,
對于printf和sprintf該函數的包含在<stdio.h>頭文件
而sprintf和wprintf函數包含在<stdio.h>或者<wchar.h>頭文件中。

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜城市| 寿阳县| 阿拉善右旗| 雷波县| 股票| 兴城市| 长丰县| 扬中市| 金溪县| 张家川| 洞头县| 渭南市| 富川| 宿松县| 新郑市| 项城市| 灵武市| 梧州市| 和平县| 蓬莱市| 鹤壁市| 沁水县| 咸阳市| 瑞安市| 潜江市| 宿州市| 临桂县| 讷河市| 哈密市| 蓬莱市| 肥城市| 璧山县| 哈巴河县| 若羌县| 亚东县| 凤山县| 石家庄市| 华池县| 阿瓦提县| 中江县| 阜宁县|