我又重新把之前的写的博客看了一遍,写的是什么狗屁,我自己看得都费劲,这里我重开一博客把之前在剖析(四)里的内容摘取出来。
在分析print_object()函数时,对于出现的print_String_ptr()函数,我们做进一步的分析。下面就是print_String_ptr()函数,我已经贴好了注释,针对给定的text文件,就返回"\"name\""了。
当然,上述针对的给定的text字符串,刚好满足if(iflag)条件,所以就直接输出了,接下来我们分析一下未满足条件的,也就是flag为1的时候。这就是,在上图的黄色框中的部分的条件成立的,即可以字符串的第一个字符是双引号或反斜杠或者ASCII码小于32的,我们先看看小于32的ASCII码包括哪些内容,如下图:
有点长,我就不全贴出来了(给个地址:http://ascii.911cha.com/?year=13),可以看到,都是一些控制字符串,非显示字符串,控制字符是用来实现特定操作的,如一些比较常用的控制字符就是ESC、BACKSPACE(删除上一个字符)、Del(删除当前字符)、回车符、换行符等。
好了,我们回到代码部分,首先判断是不是空串,如果是就直接输出俩双引号。
接下来,我们来分析最后的while()部分。这部分其实也很好理解,就是是显示字符就直接保存,不是的话需要判断以及加一些反斜杠等。需要注意的是最后default语句,sprintf()函数和printf()函数是相似的,前面加个 s 表示的是string嘛,不同的是printf()是将内容写在窗口上,而sprintf()函数是将内容写到其第一个参数里面,在这里指的是ptr2.而“u%04x”指的是以4位16进制写入,0表示的是不足4为就补0,4表示的是4位的意思,x表示的是16进制。
差不多就分析这么多吧。加油加油!
来源:https://blog.csdn.net/qq_40963043/article/details/101062708