如何使用printf打印非空终止的字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (74)

假设我在运行时知道字符串的长度,如何使用printf打印非空终止字符串?

提问于
用户回答回答于
printf("%.*s", length, string);

与其他参数一起使用:

printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
//                         ^^^^                       ^^^^^^^^^^^^^^

如果要打印内部为空的非空终止的字符串,则不能使用单个printf。使用fwrite来代替:

fwrite(string, 1, length, stdout);
用户回答回答于

一般来说,如果字符串是非空的“终止”,但在中间有一个空字符,printf("%.*s", length, string);不能按预期工作。这是因为%.*s格式字符串要求printf打印最多length字符,而不是确切的 length字符。

我宁愿使用

fwrite(string, sizeof(char), length, stdout);

这是一个示例代码:

#include <stdio.h>

int main(void) {
    size_t length = 5;

    char string[length];
    string[0] = 'A';
    string[1] = 'B';
    string[2] = 0;        // null character in the middle
    string[3] = 'C';
    string[4] = 'D';

    printf("With printf: %.*s\n", length, string);
    printf("With fwrite: ");
    fwrite(string, sizeof(char), length, stdout);
    printf("\n");

    return 0;
}

输出:

With printf: AB
With fwrite: AB CD

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    27 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券