色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > sprintf函數(shù)的用法

          sprintf函數(shù)的用法

          發(fā)布人:電子禪石 時間:2021-09-07 來源:工程師 發(fā)布文章

          注意事項(xiàng):

          sprintf 會自動擴(kuò)展,之前定義一個char  id[10] = {0x47,0x17,0xF0}數(shù)組,然后打印到字符串時候。

          sprintf(hostName + hostNameLen,"_%02x%02x%02x_%d"cracaId[0], cracaId[1], cracaId[2],cert_name_id++);

          總是多打印幾個FFFF.

          4717fffffff0.

          最后 將char 類型改為 unsigned char 就可以了。


          sprintf函數(shù)的用法

          1、該函數(shù)包含在stdio.h的頭文件中。

          2、sprintf和平時我們常用的printf函數(shù)的功能很相似。sprintf函數(shù)打印到字符串中(要注意字符串的長度要足夠容納打印的內(nèi)容,否則會出現(xiàn)內(nèi)存溢出),而printf函數(shù)打印輸出到屏幕上。sprintf函數(shù)在我們完成其他數(shù)據(jù)類型轉(zhuǎn)換成字符串類型的操作中應(yīng)用廣泛。

          3、sprintf函數(shù)的格式:

          int sprintf( char *buffer, const char *format [, argument,…] );

          除了前兩個參數(shù)固定外,可選參數(shù)可以是任意個。buffer是字符數(shù)組名;format是格式化字符串(像:”%3d%6.2f%#x%o”,%與#合用時,自動在十六進(jìn)制數(shù)前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函數(shù)的精華。

          printf 和sprintf都使用格式化字符串來指定串的格式,在格式串內(nèi)部使用一些以”%”開頭的格式說明符來占據(jù)一個位置,在后邊的變參列表中提供相應(yīng)的變量,最終函數(shù)就會用相應(yīng)位置的變量來替代那個說明符,產(chǎn)生一個調(diào)用者想要的字符串。

          4、可以控制精度

          char str[20];

          double f=14.309948;

          sprintf(str,”%6.2f”,f);

          5、可以將多個數(shù)值數(shù)據(jù)連接起來

          char str[20];

          int a=20984,b=48090;

          sprintf(str,”%3d%6d”,a,b);

          str[]=”20984 48090”

          6、可以將多個字符串連接成字符串

          char str[20];

          char s1[5]={‘A’,’B’,’C’};

          char s2[5]={‘T’,’Y’,’x’};

          sprintf(str,”%.3s%.3s”,s1,s2);

          %m.n在字符串的輸出中,m表示寬度,字符串共占的列數(shù);n表示實(shí)際的字符數(shù)。%m.n在浮點(diǎn)數(shù)中,m也表示寬度;n表示小數(shù)的位數(shù)。

          7、可以動態(tài)指定,需要截取的字符數(shù)

          char str[20];

          char s1[5]={‘A’,’B’,’C’};

          char s2[5]={‘T’,’Y’,’x’};

          sprintf(str,”%.*s%.*s”,2,s1,3,s2);

          sprintf(str, “%*.*f”, 10, 2, 3.1415926);

          8、可以打印出i的地址

          char str[20];

          int i;

          sprintf(str, “%p”, &i);

          上面的語句相當(dāng)于

          sprintf(str, “%0*x”, 2 * sizeof(void *), &i);

          9、sprintf的返回值是字符數(shù)組中字符的個數(shù),即字符串的長度,不用在調(diào)用strlen(str)求字符串的長度。

          10、使用字符指針指向的字符串來接收打印的內(nèi)容

          例子:


          int main()

          {

              int ddd=666;

              char *buffer=NULL;    

              if((buffer = (char *)malloc(80*sizeof(char)))==NULL)

              {

                  printf("malloc error\n");

              }

              sprintf(buffer, "The value of ddd = %d", ddd);//The value of ddd = 666

              printf("%s\n",buffer);

              free(buffer);

              buffer=NULL;

              return 0;

          }

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          12

          13

          14

          指針剛開始定義的時候,并不指向所處,可以指向一個變量,然后可以用,如果要單純用這個指針,那么要給這個指針malloc分配一片內(nèi)存,加了malloc就要加stdlib.h

          11、設(shè)想當(dāng)你從數(shù)據(jù)庫中取出一條記錄,然后希望把他們的各個字段按照某種規(guī)則連接成一個字符串時,就可以使用這種方法,從理論上講,他應(yīng)該比strcat 效率高,因?yàn)閟trcat 每次調(diào)用都需要先找到最后的那個字符串結(jié)束字符’\0的位置,而在上面給出的例子中,我們每次都利用sprintf 返回值把這個位置直接記下來了。

          例子:


          void main(void)

              char buffer[200], s[] = "computer", c = 'l'; 

              int i = 35, j; 

              float fp = 1.7320534f; // 

              j = sprintf( buffer, " String: %s\n", s ); // 

              j += sprintf( buffer + j, " Character: %c\n", c ); // 

              j += sprintf( buffer + j, " Integer: %d\n", i ); // 

              j += sprintf( buffer + j, " Real: %f\n", fp );// 

              printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );

          }

          1

          2

          3

          4

          5

          6

          7

          8

          9

          10

          11

          該例子是將所有定義的數(shù)據(jù)和格式控制塊中的字符連接在一起,最后打印出來buffer的內(nèi)容和字符串中字符的個數(shù)。

          結(jié)果如圖所示:



          12、 格式化數(shù)字字符串

          sprintf最常見的應(yīng)用之一莫過于把整數(shù)打印到字符串中。如:

          (1)把整數(shù)123打印成一個字符串保存在s中。

          sprintf(s, “%d”, 123); //產(chǎn)生“123″

          (2)可以指定寬度,不足的左邊補(bǔ)空格:

          sprintf(s, “%8d%8d”, 123, 4567); //產(chǎn)生:“ 123 4567″

          當(dāng)然也可以左對齊:

          sprintf(s, “%-8d%8d”, 123, 4567); //產(chǎn)生:“123 4567″

          (3)也可以按照16進(jìn)制打?。?/p>

          sprintf(s, “%8x”, 4567); //小寫16進(jìn)制,寬度占8個位置,右對齊

          sprintf(s, “%-8X”, 4568); //大寫16進(jìn)制,寬度占8個位置,左對齊

          這樣,一個整數(shù)的16進(jìn)制字符串就很容易得到,但我們在打印16進(jìn)制內(nèi)容時,通常想要一種左邊補(bǔ)0的等寬格式,那該怎么做呢?很簡單,在表示寬度的數(shù)字前面加個0就可以了。

          sprintf(s, “%08X”, 4567); //產(chǎn)生:“000011D7″

          上面以”%d”進(jìn)行的10進(jìn)制打印同樣也可以使用這種左邊補(bǔ)0的方式。

          這里要注意一個符號擴(kuò)展的問題:比如,假如我們想打印短整數(shù)

          (4)(short)-1的內(nèi)存16進(jìn)制表示形式,在Win32平臺上,一個 short型占2個字節(jié),所以我們自然希望用4個16進(jìn)制數(shù)字來打印它:

          short si = -1;

          sprintf(s, “%04X”, si);

          產(chǎn)生“FFFFFFFF,怎么回事?因?yàn)?sprintf是個變參函數(shù),除了前面兩個參數(shù)之外,后面的參數(shù)都不是類型安全的,函數(shù)更沒有辦法僅僅通過一個“%X”就能得知當(dāng)初函數(shù)調(diào)用前參數(shù)壓棧時 被壓進(jìn)來的到底是個4字節(jié)的整數(shù)還是個2字節(jié)的短整數(shù),所以采取了統(tǒng)一4字節(jié)的處理方式,導(dǎo)致參數(shù)壓棧時做了符號擴(kuò)展,擴(kuò)展成了32位的整數(shù)-1,打印時 4個位置不夠了,就把32位整數(shù)-1的8位16進(jìn)制都打印出來了。如果你想看si的本來面目,那么就應(yīng)該讓編譯器做0擴(kuò)展而不是符號擴(kuò)展(擴(kuò)展時二進(jìn)制左邊補(bǔ)0而不是補(bǔ)符號位):

          sprintf(s, “%04X”, (unsigned short)si);

          就可以了。或者:

          unsigned short si = -1;

          sprintf(s, “%04X”, si);

          sprintf和printf還可以按8進(jìn)制打印整數(shù)字符串,使用”%o”。注意8進(jìn)制和16進(jìn)制都不會打印出負(fù)數(shù),都是無符號的,實(shí)際上也就是變量的內(nèi)部編碼的直接用16進(jìn)制或8進(jìn)制表示。


          參考:http://blog.csdn.net/cos_sin_tan/article/details/7548632

          http://nnssll.blog.51cto.com/902724/198237/

          http://blog.csdn.net/s202090414/article/details/8690518

          http://blog.csdn.net/peng___peng/article/details/51510685

          ————————————————


          原文鏈接:https://blog.csdn.net/yishizuofei/article/details/78195255


          *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



          關(guān)鍵詞: C

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉