【发布时间】:2012-08-31 04:12:12
【问题描述】:
我有一个以零结尾的字符串:
char* s = ...;
我正在生成 C 源代码(在运行时),我想输出一个表示 s 的字符串文字,它将在生成的 C 程序中生成与 s 相同的字符串。
我使用的算法是:
Output "
Foreach char c in s
if c == " output \"
else if c == \ output \\
else output c
Output "
除了" 和\ 之外,我还需要对其他字符进行特殊处理吗?
【问题讨论】:
-
还有很多其他的。 Unicode、单引号、换行等都需要特殊处理
-
如果
s包含转义的\"怎么办? -
@dda: 它将被正确编码为
"...\\\"..." -
@RichardJ.RossIII: 不会保留 unicode 和单引号吗?他们需要逃跑吗?
-
@Andrew:我认为Richard 提到的问题是C 实现的源字符集不一定与执行字符集相同。这是一种奇特的说法,仅仅因为
char可以包含某些字符(例如拉丁语 1 或 UTF-8)并不一定意味着源文件可以。此外,您没有质疑的更明显的一点是,换行符需要特殊处理。 ASCII0x27单引号不需要特殊处理,但 Windows CP-1252 和\u2019中0x92的“弯曲”引号可能。