有沒有辦法強制sscanf不允許多餘的空格。sscanf也可能接受太多的空格
以下代碼接受"N_ 234"
,即使它應該只接受"N_234"
:
int r;
unsigned b;
r = sscanf("N_ 234", "N_%u", &b); /* Returns 1 */
測試與IAR編譯器。
有沒有辦法強制sscanf不允許多餘的空格。sscanf也可能接受太多的空格
以下代碼接受"N_ 234"
,即使它應該只接受"N_234"
:
int r;
unsigned b;
r = sscanf("N_ 234", "N_%u", &b); /* Returns 1 */
測試與IAR編譯器。
可能是我的代碼對您有所幫助:
# 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)。
試試吧!
編輯:有溢出Ë緩衝器的機會但可使用的動態分配進行修正。
試試這個:
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);
小心,你有後,在冗餘's'的']'在第一sscanf的 – StoryTeller
@DimaRudnik:是的,你是對的,糾正,雖然這是工作 - 謝謝Dima R. –
請注意,如果「N_234」是用戶輸入,並且用戶給出了冗長的字符串,則此代碼可能會生成緩衝區溢出。 –