【问题标题】:Is there native function to print a character array in a quoted form?是否有以引号形式打印字符数组的本机函数?
【发布时间】:2021-08-12 04:59:21
【问题描述】:

以下函数实现了一种以带引号的形式打印字符数组的方法。

https://github.com/antirez/sds

...
s2 = sdscatrepr(s2,s1,sdslen(s1));
printf("%s\n", s2);

output> "a\x01\x02\n"

但它依赖于外部库。是否有用于相同目的的本机 C 函数?

【问题讨论】:

  • 不,没有。
  • 所有 c 函数都在库中。 printf 函数在 stdio 库中。 Stdio 是标准 c 库之一。

标签: c printf


【解决方案1】:

是否有用于相同目的的本机 C 函数?

不,没有。

参考中的代码并不像应有的那么简单。它实现了更一般的任务。要以可读形式打印字符,请使用:

int print_char(unsigned char c) {
    switch (c) {
      case '\\': return printf("\\\\");
      case '"':  return printf("\\\"");
      case '\n': return printf("\\n");
      case '\r': return printf("\\r");
      case '\t': return printf("\\t");
      case '\f': return printf("\\f");
      case '\a': return printf("\\a");
      case '\b': return printf("\\b");
      default:
        if (isprint(c))
            return printf("%c", c);
        else
            return printf("\\x%02x", c);
    }
}

int print_string(const char *s, size_t len) {
    int res = printf("\"");
    for (size_t i = 0; i < len; i++) {
        res += print_char(s[i]);
    }
    return res + printf("\"");
}

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多