我有一个以零结尾的字符串:
char* s = ...;
我正在生成C源代码(运行时),我想输出一个字符串文字,该字符串文字将在生成的C程序中产生与s相同的字符串。
我使用的算法是:
Output "
Foreach char c in s
if c == " output \"
else if c == \ output \\
else output c
Output "
除了
"
和\
之外,还有其他需要特殊处理的字符吗?"
、\
、\r
、\n
和\0
进行编码(Michael Burr在这里提到还需要对\?
进行编码)。如果不按照要求做,代码将无法正常运行。\x80
。如果源代码中包含非ASCII字符,则其实现是未定义的。如果不对这些字符进行编码,某些编译器可能能够正常工作,但其他编译器可能会出现问题。\t
、\b
、\x05
等)来进行编码,生成的源代码可读性会更好。如果不这样做,代码仍然可以正常工作,但可能很难阅读。'
。虽然合法,但不必要且不利于源代码的可读性。\'
\"
\?
\\
\a (alert - usually Ctrl-G)
\b (backspace)
\f (form feed)
\n
\r
\t
\v (vertical tab)
\?
是为了转义问号,这样类似于"??!"
的序列就可以被编码为"\?\?!"
,以防止它被解释为可怕的三字符组合。\a
和\v
这样的一些字符我可能会使用\x
转义序列进行转义 - 这可能取决于您的需求)。此外,对于任何其他不可打印字符,我将使用\x
转义序列将其转换为其十六进制等效形式。
s
包含转义字符",会怎么样? - dda"...\\\"..."
。 - Andrew Tomazos