2012-12-17 55 views
4

有沒有辦法強制sscanf不允許多餘的空格。sscanf也可能接受太多的空格

以下代碼接受"N_ 234",即使它應該只接受"N_234"

int r; 
unsigned b; 
r = sscanf("N_ 234", "N_%u", &b); /* Returns 1 */ 

測試與IAR編譯器。

回答

1

可能是我的代碼對您有所幫助:

# define SIZE 100 
int main(){ 
    int r; 
    unsigned b = 0u; 
    char s[SIZE] = {0}; 
    sscanf("N_234", "%[N_0-9]", s); 
    r = sscanf(s,"N_%u",&b); 
    printf("%u\n",b); 

} 

printf("%u\n",b);輸出正確的值,如果不存在空間和r爲1,否則b = 0和r是-1(EOF)。

試試吧!


編輯:有溢出Ë緩衝器的機會但可使用的動態分配進行修正。

+0

小心,你有後,在冗餘's'的']'在第一sscanf的 – StoryTeller

+0

@DimaRudnik:是的,你是對的,糾正,雖然這是工作 - 謝謝Dima R. –

+0

請注意,如果「N_234」是用戶輸入,並且用戶給出了冗長的字符串,則此代碼可能會生成緩衝區溢出。 –

2

試試這個:

int r; 
unsigned b; 
char c[20]; 
r = sscanf("N_ 234", "N_%[0-9]", c); /* Returns 0 */ 
r = sscanf("N_-234", "N_%[0-9]", c); /* Returns 0 */ 
r = sscanf("N_1234", "N_%[0-9]", c); /* Returns 1 */ 
b = atoi(c); 
+1

'b =(無符號)atoi(c);'是個好主意na! –

+0

謝謝Grijesh!你完成了我。 :P – 4B656E

+0

welmoce親愛的+1也給你;)。 –