File tree Expand file tree Collapse file tree 1 file changed +2
-2
lines changed Expand file tree Collapse file tree 1 file changed +2
-2
lines changed Original file line number Diff line number Diff line change @@ -44,7 +44,7 @@ unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
44
44
45
45
## 2. 字符串表示
46
46
47
- 在 C 语言中,字符串一般表示为空结尾字符串(null-terminated string),即以空字符(` '\0' ` )代表字符串的结束。然而,JSON 字符串是允许含有空字符的,例如这个 JSON ` "Hello\u0000World" ` 就是单个字符串,解析后为11个字符。如果纯粹使用空结尾字符来表示 JSON 解析后的结果,就没法处理空字符。
47
+ 在 C 语言中,字符串一般表示为空结尾字符串(null-terminated string),即以空字符(` '\0' ` )代表字符串的结束。然而,JSON 字符串是允许含有空字符的,例如这个 JSON ` "Hello\u0000World" ` 就是单个字符串,解析后为11个字符。如果纯粹使用空结尾字符串来表示 JSON 解析后的结果,就没法处理空字符。
48
48
49
49
因此,我们可以分配内存来储存解析后的字符,以及记录字符的数目(即字符串长度)。由于大部分 C 程序都假设字符串是空结尾字符串,我们还是在最后加上一个空字符,那么不需处理 ` \u0000 ` 这种字符的应用可以简单地把它当作是空结尾字符串。
50
50
@@ -158,7 +158,7 @@ static void test_access_string() {
158
158
159
159
我们解析字符串(以及之后的数组、对象)时,需要把解析的结果先储存在一个临时的缓冲区,最后再用 ` lept_set_string() ` 把缓冲区的结果设进值之中。在完成解析一个字符串之前,这个缓冲区的大小是不能预知的。因此,我们可以采用动态数组(dynamic array)这种数据结构,即数组空间不足时,能自动扩展。C++ 标准库的 ` std::vector ` 也是一种动态数组。
160
160
161
- 如果每次解析字符串时,都重新建一个动态数组,那么是比较耗时的。我们可以重用这个动态数组,每次解析 JSON 时就只需要创建一个。而且我们将会发现,无论是解析字符串、数组或对象,我们也只需要以先进后出的方式访问这个动态数组。换句话说,我们需要一个动态的堆栈数据结构 。
161
+ 如果每次解析字符串时,都重新建一个动态数组,那么是比较耗时的。我们可以重用这个动态数组,每次解析 JSON 时就只需要创建一个。而且我们将会发现,无论是解析字符串、数组或对象,我们也只需要以先进后出的方式访问这个动态数组。换句话说,我们需要一个动态的堆栈(stack)数据结构 。
162
162
163
163
我们把一个动态堆栈的数据放进 ` lept_context ` 里:
164
164
You can’t perform that action at this time.
0 commit comments