sprintf函数

#include"stdio.h"
//C语言中sprintf()函数的用法
//sprintf函数和printf函数的功能很类似
//sprintf打印到字符串中(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出)
//sprintf函数的格式
//int sprintf(char* buffer, const char * format[, argument, ……]);
//除了前面两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串
//(像:"%3d%6.2f%#x%o",%与#合用时,自动在十六进制前面加上0x).只要在printf中可以使用的格式化字符串
//在sprintf中都可以使用。其中格式化字符串是此函数的精华。

int main()
{
	//可以控制精度
	char str[20];
	double f = 14.12341461;
	sprintf(str, "%10.3f", f);//把14.12存放到数组里面去
	sprintf(str, "%6.6f", f);//输出的字符串的列数不够6列则用空格补齐,如果够6列则不需要填充
	printf("%s\n", str);

	//可以将多个数值数据连接起来
	char str1[20];
	int a = 2020, b = 1999;
	sprintf(str1, "%5d%5d", a, b);//把2020 1999存放到数组里面去
	printf("%s\n", str1);

	//可以将多个字符串连接成字符串
	char str2[20];
	char s1[5] = { 'A', 'B', 'C' };
	char s2[5] = { 'T', 'Y', 'X' };
	sprintf(str2, "%s%s", s1, s2);
	printf("%s\n", str2);

	//%m.n在字符串的输出中,m表示宽度,即字符串共占的列数;n表示小数点后的位数。%m.n在浮点数中 m也表示宽度 n表示小数点的位数


	//可以动态指定,需要截取的字符数 使用*
	char str3[20];
	char str4[20];
	char s3[5] = { 'A', 'B', 'C' };
	char s4[5] = { 'T', 'Y', 'X' };
	sprintf(str3, "%.*s%.*s", 2, s3, 3, s4);//*和数字对应
	printf("%s\n", str3);
	sprintf(str4, "%*.*f", 10, 2, 3.141592653);//%*.*f在该行代码中表示%10.2f
	printf("%s\n", str4);


	//可以打印出地址
	int c = 10;
	char str5[20];
	sprintf(str5, "%p", &c);
	printf("%s\n", str5);
	//上面的语句相当于
	sprintf(str5, "%0*x", 2 * sizeof(void*), &c);
	//一个字节是4位二进制
	printf("sizeof(void*)=%d\n", sizeof(void*));//sizeof(void*)的大小取决于平台 如果平台是32位的 那么sizeof(void *)就是4  64位就是8 16位就是2
	printf("%s\n", str5);


	//sprintf的返回值是字符数组中字符的个数,即字符串的长度,不能在调用strlen(str)求字符串的长度


	//使用字符指针指向的字符串来接收打印的内容
	//例子:
	int ddd = 666;
	char* buffer = NULL;
	if ((buffer = (char *)malloc(10 * sizeof(char))) == NULL)//防止申请内存出错
	{
		printf("malloc error!\n");//无法申请内存
	}
	sprintf(buffer, "The value of ddd=%d", ddd);
	printf("%s\n", buffer);
	free(buffer);
	buffer = NULL;
	//如果想用buffer这个指针,那么要给这个指针malloc一片内存,加了malloc就要加stdlib.h



	//设想当你从数据库中去除一条记录,然后希望把他们的各个字段按照某种规则连成一个字符串时,就可以使用这种方法
	//从理论上讲,他应该比strcat效率高,因为strcat每次调用都需要找到最后面那个字符串的结束符'\0'的位置
	//而在上面给出的例子中,我们每次都利用sprintf返回值把这个位置直接记下来了。


	char buffer1[200], s[] = "Computer", c1 = '1';
	int i = 35, j;
	float fp = 1.723055f;
	j = sprintf(buffer1, "String:%s\n", s);//返回存放的字符个数
	printf("j=%d\n", j);//大小为16
	j += sprintf(buffer1 + j, "Character:%c\n", c1);
	printf("j=%d\n", j);
	j += sprintf(buffer1 + j, "Integer:%d\n", i);
	printf("j=%d\n", j);
	j += sprintf(buffer1 + j, "Real:%f\n", fp);
	printf("j=%d\n", j);
	printf("Output :\n%s\ncharacter count=%d\n", buffer1, j);

	//该例子是将所有定义的数据和格式控制块中的字符连接在一起,最后打印出来buffer的内容和字符串中字符串的个数
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭就是我的姓i

你的鼓励是我创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值