分享

printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf,

 qiwbzp 2014-08-07

printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf,

wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf,


格式化规定符

%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法

************************printf***************************

printf()函数是式样化输出函数, 一般用于向准则输出设备按规定式样输出消息。正在编写步骤时经常会用到此函数。
printf()函数的挪用式样为: printf("<式样化字符串>",<参量表>);
#include<stdio.h>
#include<string.h>
intmain(void)
{
charc,s[20],*p;
inta=1234,*i;
floatf=3.141592653589;
doublex=0.12345678987654321;
p="Howdoyoudo";
strcpy(s,"Hello,Comrade");
*i=12;
c='\x41';
printf("a=%d\n",a);/*结果输出十进制整数a=1234*/
printf("a=%6d\n",a);/*结果输出6位十进制数a=1234*/
printf("a=%06d\n",a);/*结果输出6位十进制数a=001234*/
printf("a=%2d\n",a);/*a超过2位,按实际值输出a=1234*/
printf("*i=%4d\n",*i);/*输出4位十进制整数*i=12*/
printf("*i=%-4d\n",*i);/*输出左对齐4位十进制整数*i=12*/
printf("i=%p\n",i);/*输出地址i=06E4*/
printf("f=%f\n",f);/*输出浮点数f=3.141593*/
printf("f=%6.4f\n",f);/*输出6位其中小数点后4位的浮点数
f=3.1416*/
printf("x=%lf\n",x);/*输出长浮点数x=0.123457*/
printf("x=%18.16lf\n",x);/*输出18位其中小数点后16位的长浮点
数x=0.1234567898765432*/
printf("c=%c\n",c);/*输出字符c=A*/
printf("c=%x\n",c);/*输出字符的ASCII码值c=41*/
printf("s[]=%s\n",s);/*输出数组字符串s[]=Hello,Comrade*/
printf("s[]=%6.9s\n",s);/*输出最多9个字符的字符串s[]=Hello,
Co*/
printf("s=%p\n",s);/*输出数组字符串首字符地址s=FFBE*/
printf("*p=%s\n",p);/*输出指针字符串p=Howdoyoudo*/
printf("p=%p\n",p);/*输出指针的值p=0194*/
getch();
retunr0;
}

************************printf***************************

************************fprintf***************************
函数完整形式:

1
2
int  fprintf(FILE*stream,constchar*format,[argument])
其中,FILE*stream为文件指针,constcahr*format以什么样的格式输出,[argument]为输入列表

#include <stdio.h>
int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.

示例一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* Program to create backup of the AUTOEXEC.BAT file */
#include <stdio.h>
int main(void)
{
    FILE *in, *out;
    if ((in = fopen("\\AUTOEXEC.BAT", "rt")) == NULL)
    {
        fprintf(stderr, "Cannot open input file.\n");
        return 1;
    }
    if ((out = fopen("\\AUTOEXEC.BAT", "wt")) == NULL)
    {
        fprintf(stderr, "Cannot open output file.\n");
        return 1;
    }
    while (!feof(in))
        fputc(fgetc(in), out);
    fclose(in);
    fclose(out);
    return 0;
}
示例二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include<stdlib.h>
#include <process.h>
FILE *stream;
int main( void )
{
    int i = 10;
    double fp = 1.5;
    char s[] = "this is a string";
    char c = '\n';
    stream = fopen( "fprintf.out", "w" );
    fprintf( stream, "%s%c", s, c );
    fprintf( stream, "%d\n", i );
    fprintf( stream, "%f\n", fp );
    fclose( stream );
    system( "type fprintf.out" );
    return 0;
}
屏幕输出:
1
2
3
this is a string
10
1.500000
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
    FILE *fp;
    int i=617;
    char* s = "that is a good new";
    fp = fopen("text.dat","w");
    fputs("total",fp);
    fputs(":",fp);
    fprintf(fp,"%d\n",i);
    fprintf(fp,"%s",s);
    fclose(fp);
    return 0;
}
输出
1
2
total:617
that is a good new

************************fprintf***************************
************************sprintf***************************
字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。
功能:把格式化的数据写入某个字符串缓冲区
int sprintf( char *buffer, const char *format, [ argument] … );
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值:字符串长度(strlen
int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format, [argument] ... );
int _sprintf_s_l(char *buffer,size_t sizeOfBuffer,const char *format,locale_t locale ,[argument] ... );
int swprintf_s(wchar_t *buffer,size_t sizeOfBuffer,const wchar_t *format ,[argument]...);
int _swprintf_s_l(wchar_t *buffer,size_t sizeOfBuffer,const wchar_t *format,locale_t locale ,[argument]…);
template <size_t size>
int sprintf_s(char (&buffer)[size],const char *format, [argument] ... ); //仅存在于C++
template <size_t size>
int swprintf_s(wchar_t (&buffer)[size],const wchar_t *format ,[argument]...); //仅存在于C++

例子

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>//某个头文件
intmain()/*主函数“整数”类型*/
{
charbuffer[50];/*“字符”类型的数组,下面共有50个元素。*/
intn,a=5,b=3;/*三个变量都为“整数”类型,intn中间要有空格*/
n=sprintf(buffer,"%dplus%dis%d",a,b,a+b);/*赋予数值*/
printf("[%s]isastring%dcharslong\n",buffer,n);/*“格式输出”*/
  
return0;/*“返回零”
也就是程序正常退出*/
}
输出结果:
[5 plus 3 is 8] is a string 13 chars long
************************sprintf***************************
************************snprintf***************************
int snprintf(char *str, size_t size, const char *format, ...);
将可变个参数(...)按照format格式化成字符串,然后将其复制到str中
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0'),返回值为格式化后的字符串的长度。
char a[20];
i = snprintf(a, 9, "%012d", 12345);
printf("i = %d, a = %s", i, a);
输出为:i = 12, a = 00000001
strcpy() sprintf() strcat() 存在安全隐患, 其对应的安全版为:
strncpy() snprintf() strncat()
1
snprintf(s, 100, "%.*S", 3, "abcd");
s的值为abc
%.*s 表示有两项, 第一项指定了长度,第二项则是%s的内容,所以取前三位
在VS2008中需在预编译处加入
1
2
3
#if _MSC_VER
#define snprintf _snprintf
#endif
通用ANSI UNICODE 通用定义
1
_sntprintf

6例子

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<stdlib.h>
intmain()
{ 
charstr[10]={0};
snprintf(str,sizeof(str)-1,"0123456789012345678");
printf("str=%s\n",str);return0;
}
运行结果:str=012345678
************************snprintf***************************
************************vprintf***************************

vprintf
标准库函数vprintf函数与printf函数类似,所不同的是,它用一个参数取代了变长参数表,且此参数通过调用va_start宏进行初始化。同样,vfprintf和vsprintf函数分别与fprintf和sprintf函数类似。
函数名: vprintf
功 能: 送格式化输出到stdout中
用 法: int vprintf(char *format, va_list param);
程序例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<stdarg.h>
intvpf(char*fmt,...)
{
va_list argptr;
int cnt;
va_start(argptr,fmt);
cnt=vprintf(fmt,argptr);
va_end(argptr);
return(cnt);
}
intmain(void)
{
int inumber=30;
float fnumber=90.0;
char *string="abc";
vpf("%d%f%s\n",inumber,fnumber,string);
return0;
}

************************vprintf***************************















    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多