也就是说,prt("a \t\n")
应按字面打印"a \t\n"
,
有没有可用的功能呢?
答案 0 :(得分:6)
我假设你想要逃避特殊字符;也就是说,您希望打印\n
而不是换行符。
据我所知,不在标准库中。你可以自己轻松写出来;函数的核心是这样的:
static char *escape_char(char *buf, const char *s) {
switch (*s) {
case '\n': return "\\n";
case '\t': return "\\t";
case '\'': return "\\\'";
case '\"': return "\\\"";
case '\\': return "\\\\";
/* ... some more ... */
default:
buf[0] = *s;
buf[1] = '\0';
return buf;
}
}
/* Warning: no safety checks -- buf MUST be long enough */
char *escape_string(char *buf, const char *s)
{
char buf2[2];
buf[0] = '\0';
for (; *s != '\0'; s++) {
strcat(buf, escape_char(buf2, s));
}
return buf;
}
生成函数体也是一种选择,因为它可能会非常繁琐和重复。
这是你可以测试它的方法:
int main()
{
const char *orig = "Hello,\t\"baby\"\nIt\'s me.";
char escaped[100];
puts(orig);
puts(escape_string(escaped, orig));
return 0;
}
答案 1 :(得分:6)
Glib有一个函数g_strescape()可以做到这一点。如果添加到glib的依赖性对你来说不是问题,至少。
答案 2 :(得分:4)
不,因为在解析源代码期间字符串文字已经“未转义”,因此编译器永远不会看到文字反斜杠或引号。你只需要自己逃避反斜杠:"\"a \\t\\n\""
。
或者,您可以获取给定的字符串,并按其转义序列搜索并替换所有出现的控制字符。
答案 3 :(得分:1)
你必须使用反斜杠转义反斜杠和引号:
printf( "\"a \\t\\n\"" );
答案 4 :(得分:0)
没有这样的功能,但你总是可以
printf("a \\t\\n");