在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

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

            sprintf函數(shù)的用法

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

            注意事項(xiàng):

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

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

            總是多打印幾個(gè)FFFF.

            4717fffffff0.

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


            sprintf函數(shù)的用法

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

            2、sprintf和平時(shí)我們常用的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,…] );

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

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

            4、可以控制精度

            char str[20];

            double f=14.309948;

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

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

            char str[20];

            int a=20984,b=48090;

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

            str[]=”20984 48090”

            6、可以將多個(gè)字符串連接成字符串

            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、可以動(dòng)態(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ù)組中字符的個(gè)數(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

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

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

            例子:


            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)容和字符串中字符的個(gè)數(shù)。

            結(jié)果如圖所示:



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

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

            (1)把整數(shù)123打印成一個(gè)字符串保存在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個(gè)位置,右對齊

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

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

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

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

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

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

            short si = -1;

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

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

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

            就可以了?;蛘撸?/p>

            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)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



            關(guān)鍵詞: C

            相關(guān)推薦

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

            關(guān)閉