使用sscanf()拆分AT命令字符串

时间:2014-12-05 14:38:33

标签: c scanf

我在C中使用sscanf()分割字符串时遇到问题。

我有

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 个答案:

答案 0 :(得分:0)

  • sscanf格式忘记了参数tmp的转换规范;因此,输入被分配给错误的对象。
  • char code[6]char cmd[2]是一个空格,用于终止空字符,因此可能会覆盖其他对象。

纠正这些错误后,e。克。

    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);

它有效。