【21】printf()与sprintf()的区别

【1】基本概念

  【1.1】 数据--------》屏幕


    printf()
    printf_s()

    (1)printf只是检查format字符串是否为空。如果为空,会触发assert(false)。
    (2)printf_s还会检查format字符串是否有效,即其中格式是否合法。如果不合法,也会触发assert(false)。

    【1.2】数据--------》字符缓冲区


    sprintf()
    sprintf_s()    
    (1)sprintf_s是sprintf的安全版本,指定缓冲区长度来避免sprintf()存在的溢出风险,
    主要差在sprintf_s第二个参数,可以控制缓冲区大小


    【1.3】printf()与sprintf()的区别


    (1)函数printf(...)根据指定的格式(format)将参数(argument)输出到屏幕上;
    (2)函数sprintf(...)根据指定的格式(format)将参数(argument)输出到
         由指针buffer指定的字符数组(字符缓冲区)中;
    (3)sprintf比printf多一个参数buffer,
 

【2】代码

// Test38.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>


/*

   【1】 数据--------》屏幕
	printf()
	printf_s()

	(1)printf只是检查format字符串是否为空。如果为空,会触发assert(false)。
	(2)printf_s还会检查format字符串是否有效,即其中格式是否合法。如果不合法,也会触发assert(false)。

	【2】数据--------》字符缓冲区
	sprintf()
	sprintf_s()	
	(1)sprintf_s是sprintf的安全版本,指定缓冲区长度来避免sprintf()存在的溢出风险,
	主要差在sprintf_s第二个参数,可以控制缓冲区大小


	printf()与sprintf()的区别
	(1)函数printf(...)根据指定的格式(format)将参数(argument)输出到屏幕上;
    (2)函数sprintf(...)根据指定的格式(format)将参数(argument)输出到
	     由指针buffer指定的字符数组(字符缓冲区)中;
	(3)sprintf比printf多一个参数buffer,

*/

int main()
{
	//[0]printf()常用方法
	//      %[flags][width][.prec][length]type
	//      %[标志][最小宽度][.精度][类型长度]类型。

	//[1]--------------------------------类型--------------------------------------
	//类型:d(整形),o(无符号八进制),c(字符型),s(字符串),f(浮点型)
	 printf("%d\n", 10);
	 printf("%o\n", 10);
	 printf("%c\n", 'a');
	 printf("%s\n", "fsgs");
	 printf("%f\n", 10.0006);

	     //10
		 //12
		 //a
		 //fsgs
		 //10.000600

	//[2]--------------------------------标志--------------------------------------
	//	-  减号	结果左对齐,右边填空格。默认是右对齐,左边填空格。
	//  +  加号	输出符号(正号或负号)
	//	space	空格	输出值为正时加上空格,为负时加上负号
	//	#	井号	type是o、x、X时,增加前缀0、0x、0X。
	//	    type是a、A、e、E、f、g、G时,一定使用小数点。默认的,如果使用.0控制不输出小数部分,则不输出小数点。
	//	    type是g、G时,尾部的0保留。
	//	0	数字零	将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“ - ”)
	
	 printf("%-d\n", 10);
	 printf("%+d\n", 10);
	 printf("% d\n", 10);
	 printf("%#o\n", 10);
	 printf("%0d\n", 10);

		 //10
		 //+ 10
		 //10
		 //012
		 //10

	//[3]--------------------------------精度------------------------------------
	//用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,
	//若实际位数少于定义的宽度则补以空格或0。width的可能取值如下
	 printf("%.8d\n", 10);
	 printf("%.6d\n", 10);
	 printf("%*8d\n", 10);//以星号代替数值,类似于width中的*,在输出参数列表中指定精度。

	  // 00000010
		 //000010
		 //- 641

	//[4]--------------------------------类型长度------------------------------------
	//用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,
	//则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。width的可能取值如下

	 printf("%hhd\n", 'A');               //输出有符号char
	 printf("%hhu\n", 'A' + 128);           //输出无符号char
	 printf("%hd\n", 32767);              //输出有符号短整型short int
	 printf("%hu\n", 65535);              //输出无符号短整型unsigned short int
	 printf("%ld\n", 0x7fffffffffffffff); //输出有符号长整型long int
	 printf("%lu\n", 0xffffffffffffffff); //输出有符号长整型unsigned long int

		 //65
		 //193
		 //32767
		 //65535
		 //- 1
		 //4294967295
}

【3】参考文献

printf详细用法

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值