讓我首先說我不是C中的專家。我一直在審查JSON解析器的代碼。C中的JSON解析器(打印JSON)
我想了解這段代碼。
/* Render the cstring provided to an escaped version that can be printed. */
static char *print_string_ptr(const char *str)
{
const char *ptr;
char *ptr2,*out;
int len=0;
unsigned char token;
if (!str)
return cJSON_strdup("");
ptr = str;
while ((token = *ptr) && ++len) {
if (strchr("\"\\\b\f\n\r\t", token))
len++;
else if (token < 32)
len += 5;
ptr++;
}
out = (char*)cJSON_malloc(len + 3);
if (!out)
return 0;
ptr2 = out;
ptr = str;
*ptr2++ = '\"';
while (*ptr) {
if ((unsigned char)*ptr > 31 && *ptr != '\"' && *ptr != '\\')
*ptr2++ = *ptr++;
else {
*ptr2++ = '\\';
switch (token = *ptr++) {
case '\\': *ptr2++='\\'; break;
case '\"': *ptr2++='\"'; break;
case '\b': *ptr2++='b'; break;
case '\f': *ptr2++='f'; break;
case '\n': *ptr2++='n'; break;
case '\r': *ptr2++='r'; break;
case '\t': *ptr2++='t'; break;
default:
/* escape and print */
sprintf(ptr2, "u%04x", token);
ptr2 += 5;
break;
}
}
}
*ptr2++ = '\"';
*ptr2++ = 0;
return out;
}
A的這段代碼是如何工作將是真正偉大真是總體概述,我的印象是,它是「美化」 JSON字符串,是正確的?
乍一看它似乎是用r替換\ r,但是這是什麼意思?
我一直在研究sprintf的功能,但對於簡單的事情,如打印出貨幣值或其他格式問題。但我還沒有弄清sprintf函數在這裏做什麼:
sprintf(ptr2,"u%04x",token);ptr2+=5;
ptr2 + = 5的目的是什麼?
任何洞察到這真的會有所幫助。
很好解釋,TY爲它花時間! –