json-tutorial
json-tutorial copied to clipboard
tutorial01中lept_parse_*()函数的越界问题
lept_parse_false(), lept_parse_true(), lept_parse_null()函数中对字符的比较可能会越界,比如c->json="tr", 但是却比较到c->json[2]。是不是应该在if()语句中加入strlen():
if(strlen(c->json)>3 || c->json[0] != 'r' || c->json[1]!='u'||c->json[2] != 'e')
还是说这种越界没关系?
不需要。 因为c->json="tr". c string 结尾为空字符,c->json[2]为'\0', c->json[2] == 'u' 为false.(注意bug:比较用==而不是=)
好的,谢谢
不完全赞同楼上的解答。因为如果是lept_parse(&v, "fa"),楼上的回答无法解释。
其实这里应该这么解释:因为逻辑或 || 运算符是有运算顺序的,所以在c->json[1] != 'l'(实际上为‘\0’)这里由于为真的缘故,整个if判断为真,而不再进行之后的c->json[2] != 's'判断,所以不会出现越界问题。