printf、fprintf、sprintf和snprintf 區別


都是把格式好的字符串輸出,只是輸出的目標不一樣:
1 printf,是把格式字符串輸出到標准輸出(一般是屏幕,可以重定向)。
2 sprintf,是把格式字符串輸出到指定字符串中,所以參數比printf多一個char*。那就是目標字符串地址。
3 fprintf, 是把格式字符串輸出到指定文件設備中,所以參數筆printf多一個文件指針FILE*。

fprintf傳送格式化輸出到一個文件中。根據指定的format(格式)發送信息(參數)到由stream(流)指定的文件,fprintf只能和printf一樣工作。若成功則返回值是輸出的字符數,發生錯誤時返回一個負值。第一個參數是文件指針stream,后面的參數就是printf中的參數,其功能就是把這些輸出送到文件指針指定的文件中,如果想要像printf一樣將輸出送到標准輸出,只需要將文件指針FILE指定為stdout即可。
示例程序如下:
[cpp]  view plain  copy
 
  print ?
  1. #include   
  2.   
  3. FILE *stream;  
  4. int  
  5. main(void)  
  6. {  
  7.     char s[] = "this is a string.\n";  
  8.     char c = '\n';  
  9.   
  10.     stream = fopen("fprintf.out", "w");  
  11.     fprintf(stream, "%s", s);  
  12.     fprintf(stdout, "abc\n");  
  13.     return 0;  
  14. }  
該程序的運行結果是在fprintf.out文件中存入了this is a string.字符串,在標准輸出輸出了abc字符串。



sprintf,字符串格式化命令,主要功能是把格式化的數據寫入某個字符串中。第一個參數str是char型指針,指向將要寫入的字符串的緩沖區。后面第二個參數是格式化字符串。
示例程序:
[cpp]  view plain  copy
 
  print ?
  1. #include   
  2.   
  3. int  
  4. main(void)  
  5. {  
  6.     char s[100];   
  7.   
  8.     sprintf(s, "%%sfjdksfj" );  
  9.     printf("%s\n", s);  
  10.     return 0;  
  11. }  
執行后輸出結果是
[cpp]  view plain  copy
 
  print ?
  1. %sfjdksfj  



snprintf函數與sprintf函數類似。它也是將可變個參數按照format格式化成字符串,然后將其復制到str中。
(1) 如果格式化后的字符串長度 < size,則將此字符串全部復制到str中,並給其后添加一個字符串結束符('\0');(2) 如果格式化后的字符串長度 >= size,則只將其中的(size-1)個字符復制到str中,並給其后添加一個字符串結束符('\0'),返回值為格式化后的字符串的長度。
示例程序:
[cpp]  view plain  copy
 
  print ?
  1. #include   
  2.   
  3. int  
  4. main(void)  
  5. {  
  6.     char s[10];   
  7.   
  8.     snprintf(s, 4, "%%sfjdksfj" );  
  9.     printf("%s\n", s);  
  10.     snprintf(s, sizeof(s), "%%sfjdksfj" );  
  11.     printf("%s\n", s);  
  12.     return 0;  
  13. }  
運行結果:

%sf
%sfjdksfj


int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);

函數說明:最多從源串中拷貝n-1個字符到目標串中,然后再在后面加一個0。所以如果目標串的大小為n 的話,將不會溢出。

函數返回值:若成功則返回欲寫入的字符串長度,若出錯則返回負值。

Result1(推薦的用法)

#include <stdio.h>
#include <stdlib.h>

int main()
{
     char str[10]={0,};
     snprintf(str, sizeof(str), "0123456789012345678");
     printf("str=%s/n", str);
     return 0;
}


免責聲明!

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



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