我对C ++的了解非常有限。 我将ESP32与Arduino结合使用,并使用JSMN库解析数据。 我成功地用printf显示了解析数据,但是无法将返回数据放入char *。
#define ARRAYSIZE 100
HTTPClient http;
http.begin("http://servername/serv/ctrlBadge?entryCodeBadge=11d438cd1&entryidPorte=2"); //Specify the URL
//Make requests
int httpCode = http.GET();
if (httpCode > 0 ) { //Check for the returning code
String payload = http.getString();
Serial.println(httpCode2);
int lim=payload.length()+1;
char charBuf[lim];
char *myStrings[ARRAYSIZE]
payload.toCharArray(charBuf, lim) ;
char *JSON_STRING = charBuf;
Serial.println(JSON_STRING);
int i;
int r;
jsmn_parser p;
jsmntok_t t[128]; /* We expect no more than 128 tokens */
jsmn_init(&p);
r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), t, sizeof(t) / sizeof(t[0]));
if (r < 0) {
printf("Failed to parse JSON: %d\n", r);
}
/* Assume the top-level element is an object */
else if (r < 1 || t[0].type != JSMN_OBJECT) {
printf("Object expected\n");
}
else{
/* Loop over all keys of the root object */
for (i = 1; i < r; i++) {
if (jsoneq(JSON_STRING, &t[i], "codeBadge") == 0) {
/* We may use strndup() to fetch string value */
printf("- User: %.*s\n", t[i + 1].end - t[i + 1].start,
JSON_STRING + t[i + 1].start);//Response
memcpy(myStrings[i], JSON_STRING + t[i + 1].start, sizeof(JSON_STRING + t[i + 1].start));
i++;
}
}
for (int i =0; i< ARRAYSIZE; i++) Serial.println(myStrings[i]);
}
}
我成功显示了带有以下内容的codeBadge:
printf("- User: %.*s\n", t[i + 1].end - t[i + 1].start, JSON_STRING + t[i + 1].start);//Response
但是我不知道如何将返回变量放入char *。
我尝试使用memcpy函数,但出现错误:
大师冥想错误:核心1出现了恐慌(商店已禁止)。未处理异常。