2012-12-10 72 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()。如果它匹配,則會影響到你的布爾變量。