簡體   English   中英

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

[英]How do I print a non-null-terminated string using printf?

如何使用printf打印一個非空終止的字符串,假設我在運行時知道字符串的長度?

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

與其他args一起使用:

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

在C中,您可以使用%.123s格式指定要輸出的最大長度。 這意味着輸出長度最多為123個字符。 123可以替換為* ,因此長度將取自printf的參數而不是硬編碼。

請注意,這假定string不包含任何內部空字節(\\ 0),因為%.123s僅限制最大長度而不是精確長度,並且字符串仍被視為以空值終止。

如果要打印內部為null的非空終止字符串,則不能使用單個printf。 改為使用fwrite

fwrite(string, 1, length, stdout);

有關詳細說明,請參閱@ MSDousti的答案

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

通常,如果字符串是非null“終止”,但在中間有一個空字符, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM