是否有在转义模式下打印字符串的功能?

时间:2011-09-23 16:38:06

标签: c linux string

也就是说,prt("a \t\n")应按字面打印"a \t\n"

有没有可用的功能呢?

5 个答案:

答案 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");