1、該函數包含在stdio.h的頭文件中。 2、sprintf和平時我們常用的printf函數的功能很相似。sprintf函數打印到字符串中(要注意字符串的長度要足夠容納打印的內容,否則會出現內存溢出),而printf函數打印輸出到屏幕上。sprintf函數在我們完成其他數據類型轉換成字符串類型的操作中應用廣泛。 3、sprintf函數的格式: int sprintf( char *buffer, const char *format [, argument,…] ); 除了前兩個參數固定外,可選參數可以是任意個。buffer是字符數組名;format是格式化字符串(像:”%3d%6.2f%#x%o”,%與#合用時,自動在十六進制數前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函數的精華。 printf 和sprintf都使用格式化字符串來指定串的格式,在格式串內部使用一些以”%”開頭的格式說明符來占據一個位置,在后邊的變參列表中提供相應的變量,最終函數就會用相應位置的變量來替代那個說明符,產生一個調用者想要的字符串。 4、可以控制精度 char str[20]; double f=14.309948; sprintf(str,”%6.2f”,f); 5、可以將多個數值數據連接起來 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表示寬度,字符串共占的列數;n表示實際的字符數。%m.n在浮點數中,m也表示寬度;n表示小數的位數。 7、可以動態指定,需要截取的字符數 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); 上面的語句相當于 sprintf(str, “%0*x”, 2 * sizeof(void *), &i); 9、sprintf的返回值是字符數組中字符的個數,即字符串的長度,不用在調用strlen(str)求字符串的長度。 10、使用字符指針指向的字符串來接收打印的內容 例子:
int main(){ int ddd=666; char *buffer=NULL; if((buffer = (char *)malloc(80*sizeof(char)))==NULL) { printf("malloc errorn"); } sprintf(buffer, "The value of ddd = %d", ddd);//The value of ddd = 666 printf("%sn",buffer); free(buffer); buffer=NULL; return 0;}
指針剛開始定義的時候,并不指向所處,可以指向一個變量,然后可以用,如果要單純用這個指針,那么要給這個指針malloc分配一片內存,加了malloc就要加stdlib.h 11、設想當你從數據庫中取出一條記錄,然后希望把他們的各個字段按照某種規則連接成一個字符串時,就可以使用這種方法,從理論上講,他應該比strcat 效率高,因為strcat 每次調用都需要先找到最后的那個字符串結束字符’的位置,而在上面給出的例子中,我們每次都利用sprintf 返回值把這個位置直接記下來了。 例子:
void main(void){ char buffer[200], s[] = "computer", c = 'l'; int i = 35, j; float fp = 1.7320534f; // j = sprintf( buffer, " String: %sn", s ); // j += sprintf( buffer + j, " Character: %cn", c ); // j += sprintf( buffer + j, " Integer: %dn", i ); // j += sprintf( buffer + j, " Real: %fn", fp );// printf( "Output:n%sncharacter count = %dn", buffer, j );}
該例子是將所有定義的數據和格式控制塊中的字符連接在一起,最后打印出來buffer的內容和字符串中字符的個數。 結果如圖所示:
12、 格式化數字字符串 sprintf最常見的應用之一莫過于把整數打印到字符串中。如: (1)把整數123打印成一個字符串保存在s中。 sprintf(s, “%d”, 123); //產生“123″ (2)可以指定寬度,不足的左邊補空格: sprintf(s, “%8d%8d”, 123, 4567); //產生:“ 123 4567″ 當然也可以左對齊: sprintf(s, “%-8d%8d”, 123, 4567); //產生:“123 4567″ (3)也可以按照16進制打印: sprintf(s, “%8x”, 4567); //小寫16進制,寬度占8個位置,右對齊 sprintf(s, “%-8X”, 4568); //大寫16進制,寬度占8個位置,左對齊 這樣,一個整數的16進制字符串就很容易得到,但我們在打印16進制內容時,通常想要一種左邊補0的等寬格式,那該怎么做呢?很簡單,在表示寬度的數字前面加個0就可以了。 sprintf(s, “%08X”, 4567); //產生:“000011D7″ 上面以”%d”進行的10進制打印同樣也可以使用這種左邊補0的方式。 這里要注意一個符號擴展的問題:比如,假如我們想打印短整數 (4)(short)-1的內存16進制表示形式,在Win32平臺上,一個 short型占2個字節,所以我們自然希望用4個16進制數字來打印它: short si = -1; sprintf(s, “%04X”, si); 產生“FFFFFFFF,怎么回事?因為 sprintf是個變參函數,除了前面兩個參數之外,后面的參數都不是類型安全的,函數更沒有辦法僅僅通過一個“%X”就能得知當初函數調用前參數壓棧時 被壓進來的到底是個4字節的整數還是個2字節的短整數,所以采取了統一4字節的處理方式,導致參數壓棧時做了符號擴展,擴展成了32位的整數-1,打印時 4個位置不夠了,就把32位整數-1的8位16進制都打印出來了。如果你想看si的本來面目,那么就應該讓編譯器做0擴展而不是符號擴展(擴展時二進制左邊補0而不是補符號位): sprintf(s, “%04X”, (unsigned short)si); 就可以了?;蛘? unsigned short si = -1; sprintf(s, “%04X”, si); sprintf和printf還可以按8進制打印整數字符串,使用”%o”。注意8進制和16進制都不會打印出負數,都是無符號的,實際上也就是變量的內部編碼的直接用16進制或8進制表示。
參考: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
147848.html
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
超級牛聽如何重新設置網絡?牛聽聽換了wifi之后的系統設置方法。首次識別牛聽聽,再點百度主頁的未手機綁定熏教機,再點擊添加一欄,選著牛聽一下型號windows版或便攜版。按顯示然后輸入下的無線網帳號及登錄密碼。按一下牛聽一下身側的wlan鍵,此時牛聽聽會震動提示結束網路配置如何,牛再聽聽正面的無線網顯示燈紅色閃爍。左鍵單擊停止配置好不好后,將諾基亞手機東面牛去聽聽的錄音鍵。fast無線接收器怎么使...
如何使用Blued網頁版?1. 在瀏覽器中搜索“藍色”,在右上角選擇“web版本”,然后跳轉到包含二維碼的頁面,如圖所示。2. 在手機上下載并注冊blued。打開blued后,單擊“around”頁面右上角的菜單按鈕。3. 從菜單選項中選擇“掃描”。4. 掃描第一步網頁上的二維碼以確認登錄。5. 藍色web版本的登錄頁如圖所示。web版沒有客戶端的各種功能,只能實現消息的接收和回復。然后你就可以開...
請教寶路華手表怎么樣?包華手表在歐美國家非常有名。在我們國家,到了一定年齡的長輩也懂點東西。這是一塊完整的瑞士手表。它的價格不是很高,普通款2000-6000左右。高端的有幾個W碼?,F在很多白領都有布魯華手表,你可以找身邊的朋友打個電話聯系布魯華公司,或者登陸布魯華中文網。瑞士手表寶路華怎樣?包華寶路華手表屬于中低檔瑞士品牌手表。主要是價格比較便宜,用的是塞利塔公司的機芯?;蛘咧饕悄7掳K\動。...