【问题标题】:Print a string of a given length打印给定长度的字符串
【发布时间】:2021-03-18 13:57:07
【问题描述】:

printf("%s", ...) 假定以空字符结尾的字符串。如果我有一个以长度分隔的字符串,最好的方法是什么?

假设buf是字符串的起始地址,n是字符串的长度。我有以下代码。这是最好的方法吗?

  for(int i=0;i<n;++i) {
    fputc(buf[i], stdout);
  }

【问题讨论】:

  • C lib 将 string 定义为以 null 字符 结尾。 “如果我有一个由长度分隔的字符串”在 C 中更好地描述为一个由长度分隔的字符数组。它不是字符串

标签: c string


【解决方案1】:

您可以使用%.*s 格式说明符来指定要打印的长度。

#include <stdio.h>

int main(void) {
    int length = 3;
    const char* str = "123456";
    printf("%.*s\n", length, str);
    return 0;
}

这个例子将打印123

打印固定长度数据的更好方法是使用fwrite()printf() 可以做很多事情,所以它可能会不必要地慢。

#include <stdio.h>

int main(void) {
    int length = 3;
    const char* str = "123456";
    fwrite(str, sizeof(*str), length, stdout);
    return 0;
}

【讨论】:

  • printf("%.*s\n", length, str); 不会打印到首先遇到空字符的长度。 printf("%.*s\n", 7, "abc\0xyz"); 仅打印 "abc"fwrite() 将打印所有 7 个。
【解决方案2】:

我认为在这里使用 fwrite 也是一种过度杀伤力,因为无论如何您都在打印一个字符串(这是一组字符)。 相反,您可以只使用 putchar(),它默认写入 stdio

while(i<n)
 putchar(buf[i++]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多