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

时间:2010-01-26 06:15:17

标签: c string printf

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

2 个答案:

答案 0 :(得分:96)

printf("%.*s", length, string);

与其他args一起使用:

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

在C中,您可以使用%.123s格式指定要输出的最大长度。这意味着输出长度最多为123个字符。 123可以替换为*,因此长度将取自printf的参数而不是硬编码。

请注意,这假设string不包含任何内部空字节(\ 0),因为%.123s仅限制最大长度而非 exact < / em> length,字符串仍被视为以null结尾。

如果要打印内部为null的非空终止字符串,则不能使用单个printf。请改用fwrite

fwrite(string, 1, length, stdout);

有关详细说明,请参阅@M.S.Dousti's answer

答案 1 :(得分:16)

@KennyTM提供的答案很棒,但有一点微妙。

通常,如果字符串为非null&#34;已终止&#34;,但中间有空字符,则printf("%.*s", length, string);无法按预期工作。这是因为%.*s格式字符串要求printf打印最大length个字符,而不是完全 length字符。

我宁愿使用@William Pursell在OP下的评论中指出的更一般的解决方案:

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