<sprintf>用法总结

本文详细解析了sprintf函数的使用方法,包括格式化数字字符串、连接字符串、打印地址信息等核心功能。并通过实例展示了如何利用该函数进行字符串操作,适用于C语言程序员深入理解sprintf的高级用法。

开门见山,直入主题

sprintf函数原型

int sprintf( char *buffer, const char *format [, argument] ... );

 

 1、格式化数字字符串

将一个整数转化至字符串数组中,见下例

1.1

 sprintf(str,"%d",1234);

 printf("十进制 %s\r\n", str);  //“1234”

1.2

//使用空格补齐
 
sprintf(str,"%2d",1234);  //指定宽度,不足的使用空格补

printf("十进制 %s\r\n", str);  //“  1234”
//左边补0 的等宽格式
 
sprintf(str,"%02d",1234);  //

printf("十进制 %s\r\n", str);  //“001234”

1.3

sprintf(str,"%-2d",1234);  //指定宽度,左对齐

printf("十进制 %s\r\n", str);  //“1234  ”

1.4

”%m.nf”格式含义:m代表指定宽度,n代表小数点取得位数

2、连接字符串

char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "

char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(s, "%.7s%.7s", a1, a2);      //产生:"ABCDEFGHIJKLMN"

 

3、打印地址信息

有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:

sprintf(s, "%u", &i);

不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:

sprintf(s, "%08X", &i);

然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:

sprintf(s, "%p", &i);

我觉得它实际上就相当于:

sprintf(s, "%0*x", 2 * sizeof(void *), &i);

4、sprintf 的返回值

 

 

Build started: Project: dht11_peizhi *** Using Compiler 'V6.19', folder: 'D:\ruanjian\Keil\ARM\ARMCLANG\Bin' Build target 'dht11_peizhi' ../Core/Src/main.c(106): warning: illegal character encoding in string literal [-Winvalid-source-encoding] OLED_ShowMixedCH(20, 16,(uint8_t*)"--><B9><DC>跃<--"); ^~~~~~~~ ../Core/Src/main.c(107): warning: illegal character encoding in string literal [-Winvalid-source-encoding] OLED_ShowMixedCH(30, 32,(uint8_t*)"<C4><E3><BA><C3>!!!"); ^~~~~~~~~~~~~~~~ ../Core/Src/main.c(142): warning: illegal character encoding in string literal [-Winvalid-source-encoding] sprintf(buff,"<CE><C2>:%d<A1><E3>C",temperature); //<D3><C3>sprintf<BD><AB><D5><FB><CA><FD><B8><F1>式<BB><AF>为<D7>址<FB><B4><AE> ^~~~~~~~ ~~~~~~~~ ../Core/Src/main.c(160): warning: 'sprintf' will always overflow; destination buffer has size 20, but format string expands to at least 21 [-Wfortify-source] sprintf(luxbuff,"lux:%d lux ",lux); //<D3><C3>sprintf<BD><AB><D5><FB><CA><FD><B8><F1>式<BB><AF>为<D7>址<FB><B4><AE> ^ ../Core/Src/main.c(170): warning: result of comparison of constant 10000 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if(temperature>=25||soil>=80.00||humidity>=90||lux>=10000) ~~~^ ~~~~~ ../Core/Src/main.c(227): error: use of undeclared identifier 'jw01_huart' if(huart == jw01_huart) { ^ ../Core/Src/main.c(228): error: use of undeclared identifier 'rx_buffer' JW01_DataProcess(rx_buffer); ^ ../Core/Src/main.c(229): error: use of undeclared identifier 'rx_buffer' HAL_UART_Receive_IT(huart, rx_buffer, JW01_FRAME_LEN); ^ 5 warnings and 3 errors
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值