gpt4 book ai didi

c - 获取字符串后的第一个单词

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:15 25 4
gpt4 key购买 nike

我正在使用 esp8266,我需要在“+CWLAP:”这个词后面加上第一个工作 iside 引号

这是我的输出结果。

AT+CWLAP
+CWLAP:(3,"MainNetwork",-76,"00:15:6d:a6:61:fa",1,107,0,5,3,3,0)
+CWLAP:(1,"SubNetwork",-79,"00:4f:62:19:19:43",9,85,0,0,0,3,0)

好的

我需要打印 MainNetwork 和 subNetwork。这是我正在尝试做的事情

char *p =strtok(Receive.bytes, "+CWLAP:"); 

p = strtok(NULL, "\"");
p = strtok(NULL, "\"");
printf("%s\r\n",p);
__delay_ms(20);

p = strtok(NULL, "+CWLAP:");
p = strtok(NULL, "\"");
p = strtok(NULL, "\"");
printf("%s\r\n",p);
__delay_ms(20);

出于某种原因,我将其纳入我的输出

MainNetwork
,1,107,0,5,3,3,0)
+CWLAP:(1,

最佳答案

替换

char *p =strtok(Receive.bytes, "+CWLAP:");
p = strtok(NULL, "\"");

通过

char *p =strstr(Receive.bytes, "+CWLAP:"); 
p = strtok(p, "\"");

因为在你的第一个 strtok "+CWLAP:"中是一串分隔符,所以 strtok 会给你 AT 放在 '+' 之前

与第二个类似,但 strtok 添加空字符,因此第二个 strstr 必须在任何 strtok 之前完成。

完整的解决方案可以是:

  char * p1 = strstr(Receive.bytes, "+CWLAP:"); 
char * p3 = strstr(p1 + 7, "+CWLAP:");
char * p2;

p2 = strtok(p1, "\"");
p2 = strtok(NULL, "\"");
printf("%s\r\n",p2);

p2 = strtok(p3, "\"");
p2 = strtok(NULL, "\"");
printf("%s\r\n",p2);

补充说明,strtok 修改 Receive.bytes 添加空字符,可能您需要先复制字符串 (strdup)?

执行:

MainNetwork
SubNetwork

并管理任意数量的线路:

char * p1 = strstr(Receive.bytes, "+CWLAP:");

while (p1 != NULL) {
p1 += 7; /* bypass +CWLAP: */

char * p2 = strstr(p1, "+CWLAP:");
char * s = strtok(strchr(p1, '"') + 1, "\"");

printf("%s\r\n", s);

p1 = p2;
}

我用 strchr 替换了第一个 strtok 因为我们不需要中间字符串

关于c - 获取字符串后的第一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54288858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com