sprintf的用法總結


 大概知道sprintf的用法,今天在CSDN上看到一篇關於sprintf比較好的總結,現在抄下來,emmmmmmm.......

srpintf()函數的功能非常強大:效率比一些字符串操作函數要高;而且更具靈活性;可以將想要的結果輸出到指定的字符串中,也可作為緩沖區,而printf只能輸出到命令行上~

頭文件:stdio.h

函數功能:格式化字符串,將格式化的數據寫入字符串中。

函數原型:int sprintf(char *buffer, const char *format, [argument]...)

參數:

(1)buffer:是char類型的指針,指向寫入的字符串指針;

(2)format:格式化字符串,即在程序中想要的格式;

(3)argument:可選參數,可以為任意類型的數據;

函數返回值:buffer指向的字符串的長度;

用處:

(1)格式化數字字符串:

在這點上sprintf和printf的用法一樣,只是打印到的位置不同而已,前者打印給buffer字符串,后者打印給標准輸出,所以sprintf也可以用來將整型轉化為字符串,比itoa效率高且如此地簡便~比如:sprintf(buffer, "%d", 123456);執行后buffer即指向字符串“123456”~

(2)連接字符:

下面通過兩個例子來說明這個問題:

(a)連接以'\0'結束的字符串:

 1 #include<stdio.h>  
 2 int main()  
 3 {  
 4     char buffer[10];  
 5     char *a = "1234";  
 6     char *b = "5678";  
 7     sprintf(buffer, "%s%s", a, b);  
 8     printf("%s\n", buffer);  
 9     return 0;  
10 }  

運行結果:

(b)連接結尾沒有'\0'的字符數組或字符串緩沖區:

#include<stdio.h>  
int main()  
{  
    char a[] = {'1', '2', '3', '4'};  
    char b[] = {'5', '6', '7', '8'};  
    char buffer[10];  
    sprintf(buffer, "%.4s%.4s", a, b);  
    printf("%s\n", buffer);  
    return 0;  
} 

運行結果:

如果第二種情況的程序中,sprintf的format部分為"%4s%4s"或"%s%s",運行結果均為:

(c)如果我們想動態獲取要處理的字符緩沖區長度,則將上面sprintf改為:sprintf(buffer, "%.*s%.*s", sizeof(a), a, sizeof(b), b);即可~

(3)利用sprintf中的返回值:

在”AOV網絡和拓撲(二)——實現“篇中,有這樣一行程序:pos += sprintf(output+pos, "%d ", j+1); 它的作用是什么呢?

因為sprintf函數的返回值為output+pos所指向字符串的長度,所以對於pos來說,相當於執行了一次pos+=sizeof(output+pos),如果這條語句放在一個循環里,則第二次執行sprintf時output+pos隨即指向了當前緩沖區的末尾(注意不是output的末尾!否則會讀取非法內存!),這樣就可以生成一個具有一定規則的字符串了~寫個例子:

#include<stdio.h>  
int main()  
{  
    char buf[100];  
    int pos = 0;  
    for(int j = 0; j < 10; j++)  
        pos += sprintf(buf+pos, "%d-", j);  
    buf[pos-1] = '\n';//將最后一個字符'-'轉換為'\n'  
    printf(buf);  
    return 0;  
}  

運行結果:

pos每次增加2,因為每次buf字符串后面都要加上兩個字符j和‘-’。

 

轉載自  nopoppy 的博客 地址:https://blog.csdn.net/nopoppy/article/details/52589745


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM