2012-12-10 116 views
2

我想从一个字符串获得一个布尔值。字符串看起来像这样:sscanf是否支持布尔类型?

char *s = "value=TRUE"; 

值可能是TRUEFALSEtruefalse

我米不知道是否有一个格式说明直接获得字符串中的布尔值?我不需要传递一个字符串,然后推导出布尔值。

我正在寻找类似的东西

bool x; 
sscanf(s,"value=%b",&x); 

的问题。是否有可能直接使用sscanf和格式说明符来获取bool值?

如果没有,是否有快速的方法呢?

编辑:

基于没有直接的格式说明的响应。

这里一个快速方法后得到的布尔值directelly

char b[8]; 
if (sscanf(s,"value=%[TtRrUuEe]",b)) 
    return TRUE; 
else 
    return FALSE; 

我知道,上面的方法是有限的。如何改善它?

注意:默认值是假的情况下,值字符串包含垃圾

+0

我想借此机会指出'bool'不是typedef。 – Alex

回答

2

简单的答案是“不”。

你可以得到GNU C库的源代码并自己改变它。

f.e.

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 
} 
+1

你的意思是“glibc”?有“glib”和“glibc”,它们是不同的。 –

+0

@dietrich对不起,你是对的,改了它 –

0
char b[8]; 
if (sscanf(s,"value=%[TtRrUuEe]",b)) 
    return TRUE; 
else 
    return FALSE; 
+0

这会崩溃。您必须为字符串说明符分配空间来存储数据。 –

+0

下载。错误。代码已更新 – MOHAMED

+0

这也将匹配诸如“子宫”(后面留下尾随的“s”)之类的东西,而不仅仅是“真”的所有病例变体。 –

0

不,你必须阅读价值**字符,然后小写您已经阅读的价值,把它比作“真”用的strcmp()。如果它匹配,则会影响到你的布尔变量。

相关问题