[英]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.