~~~
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
~~~
**printf是標準的輸出函數。**
fprintf傳送格式化輸出到一個文件中。根據指定的format(格式)發送信息(參數)到由stream(流)指定的文件,fprintf只能和printf一樣工作。若成功則返回值是輸出的字符數,發生錯誤時返回一個負值。第一個參數是文件指針stream,后面的參數就是printf中的參數,其功能就是把這些輸出送到文件指針指定的文件中,如果想要像printf一樣將輸出送到標準輸出,只需要將文件指針FILE指定為stdout即可。
**示例程序如下:**
~~~
#include <stdio.h>
FILE *stream;
int
main(void)
{
char s[] = "this is a string.\n";
char c = '\n';
stream = fopen("fprintf.out", "w");
fprintf(stream, "%s", s);
fprintf(stdout, "abc\n");
return 0;
}
~~~
該程序的運行結果是在fprintf.out文件中存入了this is a string.字符串,在標準輸出輸出了abc字符串。
sprintf,字符串格式化命令,主要功能是把格式化的數據寫入某個字符串中。第一個參數str是char型指針,指向將要寫入的字符串的緩沖區。后面第二個參數是格式化字符串。
**示例程序:**
~~~
#include <stdio.h>
int
main(void)
{
char s[100];
sprintf(s, "%%sfjdksfj" );
printf("%s\n", s);
return 0;
}
~~~
執行后輸出結果是
~~~
%sfjdksfj
~~~
snprintf函數與sprintf函數類似。它也是將可變個參數按照format格式化成字符串,然后將其復制到str中。
**(1) 如果格式化后的字符串長度 < size,則將此字符串全部復制到str中,并給其后添加一個字符串結束符('\0');**(2) 如果格式化后的字符串長度 >= size,則只將其中的(size-1)個字符復制到str中,并給其后添加一個字符串結束符('\0'),返回值為格式化后的字符串的長度。
**示例程序:**
~~~
#include <stdio.h>
int
main(void)
{
char s[10];
snprintf(s, 4, "%%sfjdksfj" );
printf("%s\n", s);
snprintf(s, sizeof(s), "%%sfjdksfj" );
printf("%s\n", s);
return 0;
}
~~~
運行結果:
**%sf
%sfjdksfj**
- 前言
- (四)回調函數
- (一)while(1)死循環與for(;;)死循環的區別
- (二)static關鍵字
- (三)函數
- (四)可變參數函數
- (五)setjmp和longjmp
- (六)指針
- (七)回調函數
- (八)字符串
- (九)動態內存分配
- (十)結構體
- (十一)深入理解指針
- (十二)命令行參數
- (十三)printf、fprintf、sprintf和snprintf函數
- (十四)const關鍵字詳解
- (十五)字符串輸入函數fgets、gets和scanf
- (十六)字符串輸出函數puts、fputs和printf
- (十七)字符/字符串輸出函數fputc、fputs、putc、putchar和puts
- (十八)字符/字符串輸入函數fgetc、fgets、getc、getchar和gets
- (十九)restrict關鍵詞
- (二十)scanf函數詳解
- (二一)內聯函數
- (二二)位操作
- (二三)errno變量
- (二四)內存分配