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 * 指针,也许问题就迎刃而解。此处仅作记录。有时间再对此问题重新发文。

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sscanf函数是C语言中的一个输入函数,用于从字符串中按照指定格式读取数据。当使用sscanf函数时,有可能会出现警告的情况,主要有以下几种可能的原因: 1. 格式字符串与参数不匹配:sscanf函数的第一个参数是要解析的字符串,第二个参数是格式字符串,后面的参数是要读取的数据存放的地址。如果格式字符串与参数不匹配,就会出现警告。例如,如果格式字符串中指定了读取整数,但实际参数是一个浮点数的地址,就会出现警告。 2. 参数类型不匹配:sscanf函数根据格式字符串中的格式符来确定要读取的数据类型。如果参数的类型与格式符不匹配,就会出现警告。例如,如果格式字符串中指定了读取整数,但实际参数是一个字符型指针,就会出现警告。 3. 缺少头文件:sscanf函数需要包含stdio.h头文件才能正常使用。如果没有包含该头文件,就会出现警告。 为了避免sscanf函数的警告,你可以检查以下几个方面: 1. 确保格式字符串与参数类型匹配:确保格式字符串中的格式符与实际参数的类型相匹配,例如使用"%d"来读取整数,使用"%f"来读取浮点数。 2. 确保包含了正确的头文件:在使用sscanf函数之前,确保包含了<stdio.h>头文件。 3. 检查警告信息:仔细阅读编译器给出的警告信息,根据警告信息来确定具体的问题所在,并进行相应的修正。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值