让我首先说我不是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为它花时间! –