2014-12-05 93 views
1

我有在分裂C.使用sscanf()字符串問題拆分AT命令字符串

char sms[]="AT+CMGR=7+CMGR: \"REC UNREAD\",\"+213552830677\",\"\",\"14/11/29,21:20:36+04\"123456Cn50555202555"; 

,我想

char number[15] = "+213552830677"; 
char code[6] = "123456 "; 
char cmd[2] = "Cn"; 
char arg[20] = "50555202555"; 

我用這個代碼做分割並打印結果:

sscanf(sms,"AT+CMGR=8+CMGR: \"REC UNREAD\",\"+%12s\",\"\",\"14/11/29,21:20:36+04\"%6s%2s%s",tmp ,number ,code ,cmd ,arg); 
printf("Temp: %s\r\nNumber: %s\r\nCode: %s\r\nCommand: %s\r\nArgument: %s\r\n",tmp ,number ,code ,cmd ,arg); 
+1

爲什麼你不顯示正則表達式呢? – unwind 2014-12-05 14:42:52

+0

sscanf(sms,「AT + CMGR = 8 + CMGR:\」REC UNREAD \「,\」+%12s \「,\」\「,\」14/11/29,21:20:36 + 04 \ 「%6s%2s%s」,tmp,number,code,cmd,arg); printf(「Temp:%s \ r \ nNumber:%s \ r \ nCode:%s \ r \ nCommand:%s \ r \ nArgument:%s \ r \ n」,tmp,number,code,cmd, ARG); – 2014-12-05 14:50:05

+1

這絕對不是一個正則表達式。 :|您應該將它編輯成問題,刪除RE的提及,並讓我們知道'sscanf()'解決方案的問題是什麼。 – unwind 2014-12-05 14:53:48

回答

0
  • sscanf格式您忘記對於參數tmp轉換規範;從而將輸入分配給錯誤的對象。
  • char code[6]char cmd[2]是一個短的用於終止空字符的空間,因此可能的其它對象將被覆蓋。

糾正這些錯誤,E後。 G。

char code[6+1]; 
    char cmd[2+1]; 
    char tmp[1+1]; 
    sscanf(sms, "AT+CMGR=%1s+CMGR: \"REC UNREAD\",\"+%12s" 
       "\",\"\",\"14/11/29,21:20:36+04\"%6s%2s%s", 
       tmp, number, code, cmd, arg); 

它的工作原理。