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

使用sscanf()拆分AT命令字符串,c,scanf,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] = "5055520

我在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);
  • 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);

它可以工作。

那么,你为什么不显示正则表达式呢?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(“临时:%s\r\n编号:%s\r\n代码:%s\r\n命令:%s\r\n附件:%s\r\n”,tmp,编号,代码,命令,参数);那绝对不是正则表达式您应该将其编辑到问题中,删除对REs的提及,并让我们知道
sscanf()
解决方案的问题是什么。可以为我编辑它吗当然,但我当然不知道问题出在哪里。这是一个问题中最重要的部分,你没有告诉我们。。。