#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;
}
sprintf函数
最新推荐文章于 2024-03-02 07:00:00 发布