sscanf与ssprintf用法 以及 解除sscanf编译器数据类型不匹配警告

一、解除sscanf编译器数据类型不匹配警告

sscanf使用中,当输入字符串的类型与sscanf字符串参数不匹配时,会出现编译器警告,或者不能获取到数据,导致单片机死机。

如:

int32_t x;
uint8_t str[20] = "123456";
sscanf(str, "%d", &x);

编译器会报警告:

warning: passing 'uint8_t *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types where one is of the unique plain 'char' type and the other is not [-Wpointer-sign]

查阅sscanf的函数原型后:

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

对字符串str进行强制类型转换后,警告解除,函数功能正常。

sscanf((const char *)str, "%d", &x);

 

二、使用sscanf和sprintf做字符串与数据之间进行互转

字符串与数据之间进行互转时,可以使用sscanf和sprintf。

函数sscanf:字符串转化为数据

函数sprintf:数据转化为字符串

注意:sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串作为输入源。

下面以整数与字符串互转为例说明:

sscanf是将字符串转化为整数。格式:

 sscanf(字符串的名字,"%d",整型变量的名字);

sprintf是将整数转化为字符串。格式:

 sprintf(字符串的名字,"%d",整型变量的名字);

 

三、函数说明

sscanf原型:

int sscanf(const char *str,const char *format,[argument ]...);

功 能:  执行从字符串中的格式化输入
参数: str  要输入的字符串
            format是格式控制字符串
            [,argument,...] 是选择性设定字符串。
实现原理:sscanf会从buffer中读入数据,然后按照format的格式将数据赋给argument

sprintf原型:

int sprintf(char *str, char *farmat [,argument,...]);

功 能: 格式化输出到字符串中
参数: char *str  要输出的字符串
           char *farmat [,argument,...]   要输入的格式
返回值: 返回字符串的字节数

四、关于void指针

在使用指针时,不同数据类型的参数传递也会让编译器出现警告或直接报错,遇到这种情况时可以试一下void * 指针,也许问题就迎刃而解。此处仅作记录。有时间再对此问题重新发文。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值