sscanf是否支持布尔类型?
我想从字符串中得到一个布尔值。字符串如下所示:sscanf是否支持布尔类型?,c,scanf,C,Scanf,我想从字符串中得到一个布尔值。字符串如下所示: char *s = "value=TRUE"; 该值可以是TRUE、FALSE、TRUE或FALSE 我想知道是否有一个格式说明符可以直接从字符串中获取布尔值?我不需要传递字符串,然后推导布尔值 我在找这样的东西 bool x; sscanf(s,"value=%b",&x); 问题是。是否可以使用sscanf和格式说明符直接获取布尔值 如果没有,有没有快速的方法 编辑: 基于响应,没有直接的格式说明符 这里介绍了一种直接获取布尔值的快
char *s = "value=TRUE";
该值可以是TRUE
、FALSE
、TRUE
或FALSE
我想知道是否有一个格式说明符可以直接从字符串中获取布尔值?我不需要传递字符串,然后推导布尔值
我在找这样的东西
bool x;
sscanf(s,"value=%b",&x);
问题是。是否可以使用sscanf和格式说明符直接获取布尔值
如果没有,有没有快速的方法
编辑:
基于响应,没有直接的格式说明符
这里介绍了一种直接获取布尔值的快速方法
char b[8];
if ( sscanf(s,"value=%[TtRrUuEe]",b))
return TRUE;
else
return FALSE;
我知道上述方法是有限的。如何改善它
注意:如果值字符串包含垃圾,则默认值为False。简短回答为“否”
您可以获取GNUC-library的源代码,并自行更改
f、 e
不,您必须将值读取到**char,然后将已读取的值小写,并使用strcmp()将其与“true”进行比较。如果匹配,则会影响bool变量的true。您的意思是“glibc”吗?有“glib”和“glibc”,它们是不同的。我想借此机会指出,
bool
不是typedef。这会崩溃。您必须为字符串说明符分配存储数据的空间。这还将匹配类似于s
(保留后面的s
)的内容,而不仅仅是true
的所有大小写变体。我知道这就是我在这里寻找改进格式说明符的原因
mysscanf(char *buf, char *format, ...)
{
// scan the format for %b and change it to %s and
// redirect the equivalent paramter-variable
// to a char * buffer
// then analyse the buffer and write the boolean value into the original parameter
}
char b[8];
if ( sscanf(s,"value=%[TtRrUuEe]",b))
return TRUE;
else
return FALSE;