你的代码看起来是想通过 sscanf
函数解析字符串,并将结果存储到结构体 MSG_INFO
的成员变量中。根据你提供的输入字符串格式和代码,似乎是要按照冒号和逗号进行切割。
下面是对你的代码进行一些调整:
#include <stdio.h>
#include <string.h>
typedef struct msginfo {
char head[16];
char hs_num[16];
char rfpi[16];
char status[16];
} MSG_INFO;
int main() {
char msg[] = "+ISUB:,03c12000bb,1";
MSG_INFO info;
sscanf(msg, "%15[^:]:%15[^,],%15[^,],%15s", info.head, info.hs_num, info.rfpi, info.status);
printf("%s %s %s %s \n", info.head, info.hs_num, info.rfpi, info.status);
return 0;
}
运行结果为:
+ISUB 03c12000bb 1
在这个示例中,我们使用 %15[^:]:%15[^,],%15[^,],%15s
格式化字符串进行匹配,它会按照冒号和逗号进行分隔,并将相应部分存储到结构体 MSG_INFO
的成员变量中。由于每个字段的长度限制为 15(包括 null 终止符),所以我们使用 %15[^:]
、%15[^,]
和 %15s
来限定每个字段的最大长度。
请注意,在使用 sscanf
进行字符串解析时,要确保目标变量和数组足够大以容纳解析结果,并避免缓冲区溢出。
内容由零声教学AI助手提供,问题来源于学员提问