<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > C語(yǔ)言sprintf()函數:將格式化的數據寫(xiě)入字符串

C語(yǔ)言sprintf()函數:將格式化的數據寫(xiě)入字符串

發(fā)布人:電子禪石 時(shí)間:2019-12-24 來(lái)源:工程師 發(fā)布文章

頭文件:#include <stdio.h>

sprintf()函數用于將格式化的數據寫(xiě)入字符串,其原型為:
    int sprintf(char *str, char * format [, argument, ...]);

【參數】str為要寫(xiě)入的字符串;format為格式化字符串,與printf()函數相同;argument為變量。

除了前兩個(gè)參數類(lèi)型固定外,后面可以接任意多個(gè)參數。而它的精華,顯然就在第二個(gè)參數--格式化字符串--上。 printf()和sprintf()都使用格式化字符串來(lái)指定串的格式,在格式串內部使用一些以“%”開(kāi)頭的格式說(shuō)明符(format specifications)來(lái)占據一個(gè)位置,在后邊的變參列表中提供相應的變量,最終函數就會(huì )用相應位置的變量來(lái)替代那個(gè)說(shuō)明符,產(chǎn)生一個(gè)調用者想要的字符串。

sprintf()最常見(jiàn)的應用之一莫過(guò)于把整數打印到字符串中,如:
    sprintf(s, "%d", 123);  //把整數123打印成一個(gè)字符串保存在s中
    sprintf(s, "%8x", 4567);  //小寫(xiě)16進(jìn)制,寬度占8個(gè)位置,右對齊

sprintf的作用是將一個(gè)格式化的字符串輸出到一個(gè)目的字符串中,而printf是將一個(gè)格式化的字符串輸出到屏幕。sprintf的第一個(gè)參數應該是目的字符串,如果不指定這個(gè)參數,執行過(guò)程中出現 "該程序產(chǎn)生非法操作,即將被關(guān)閉...."的提示。

sprintf()會(huì )根據參數format 字符串來(lái)轉換并格式化數據,然后將結果復制到參數str 所指的字符串數組,直到出現字符串結束('\0')為止。關(guān)于參數format 字符串的格式請參考printf()。

【返回值】成功則返回參數str 字符串長(cháng)度,失敗則返回-1,錯誤原因存于errno 中。

注意:C語(yǔ)言對數組進(jìn)行操作時(shí)并不檢測數組的長(cháng)度,如果str的長(cháng)度不夠,sprintf()很容易造成緩沖區溢出,帶來(lái)意想不到的后果,黑客經(jīng)常利用這個(gè)弱點(diǎn)攻擊看上去安全的系統。請看下面的代碼:

#include <stdio.h>
main()
{char buf[10];
sprintf(buf, "The length of the string is more than 10");
printf("%s", buf);}

編譯并運行,屏幕上輸出”The length of the string is more than 10“,同時(shí)系統提示程序已經(jīng)停止。原因就是要寫(xiě)入的字符串的長(cháng)度超過(guò)了buf的長(cháng)度,造成緩沖區溢出。

使用snprintf()來(lái)代替sprintf()將能夠很好的解決這個(gè)問(wèn)題。

【實(shí)例】打印字母a的ASCII值。

#include <stdio.h>
main()
{char a = 'a';
char buf[80];
sprintf(buf, "The ASCII code of a is %d.", a);
printf("%s", buf);}

運行結果:
The ASCII code of a is 97.

又如,產(chǎn)生10個(gè)100以?xún)鹊碾S機數并輸出。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{char str[100];
int offset =0;
int i=0;
srand(time(0));  // *隨機種子
for(i = 0;i<10;i++)
{offset+=sprintf(str+offset,"%d,",rand()%100);  // 格式化的數據寫(xiě)入字符串
}
str[offset-1]='\n';
printf(str);return 0;}

運行結果:
74,43,95,95,44,90,70,23,66,84

例子使用了一個(gè)新函數srand(),它能產(chǎn)生隨機數。例子中最復雜的部分是for循環(huán)中每次調用函數sprintf()往字符數組寫(xiě)數據的時(shí)候,str+foffset為每次寫(xiě)入數據的開(kāi)始地址,最終的結果是所有產(chǎn)生的隨機數據都被以整數的形式存入數組中。


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



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>