如何使用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
约束最大长度不是确切长度,和字符串仍视为空值终止。
如果您想打印一个非空值终止字符串内部空,则不能使用到一个printf。使用fwrite
来代替:
fwrite(string, 1, length, stdout);
的详细说明,请参见@M.S.Dousti's answer。
感谢您的快速回答可能的复制! – Mike 2010-01-26 06:17:20
注意:在默认参数促销后,'length'在这里必须有'int'类型。如果你的'length'变量比较大(例如'size_t'),你应该把它转换为'(int)',否则你的代码会在size_t比int更宽的平台上中断。 – 2014-08-04 04:25:46
由@KennyTM提供的答案是伟大的,但有微妙。
通常,如果字符串非空“已终止”,但中间为空字符,则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
根据定义,“sizeof(char)'是1。此外,'NULL'具体是一个空*指针*常量。 – 2014-08-04 03:37:08
@KeithThompson,'sizeof(char)'更具语义。另外,''\ 0'比'0'更具语义。但谁在乎 ;-) – 2017-01-12 15:58:45
- 1. Ç - 原始打印字符串中的所有非打印字符的printf
- 2. 如何使用printf打印空白字符?
- 3. 如何用'printf'打印'%'字符?
- 4. printf()将不会打印字符串c
- 5. 空终止字符串
- 6. SQL字符串空终止?
- 7. 如何使用printf从字符串数组中打印单个字符?
- 8. 空终止字符数组(C-字符串)不打印而不for循环
- 9. printf()打印垃圾字符
- 10. 传递非空值终止字符串非托管代码
- 11. 我如何使用空字符串来终止?
- 12. 使用'printf'返回字符串,不打印它
- 13. 将非ASCII字符分配给宽字符并使用printf进行打印
- 14. ATOF和非空终止字符数组
- 15. 元帅非0终止字符串
- 16. 双空终止的字符串
- 17. 将一个以空字符结尾的字符串与一个非空终止的字符串进行比较
- 18. 如何打印非重复字母的随机字符串?
- 19. 0终止它后打印C字符串
- 20. 如何将非英文字符打印到终端?
- 21. Printf打印错误的字符和0
- 22. C:Eclipse/gdb和空终止字符串
- 23. 如何使用printf打印ACE_thread_t()
- 24. 终止字符串
- 25. printf函数字符串打印输出参数用法
- 26. 如何从字符串打印空白空间?
- 27. C:字符串Concatenation:空终止字符串
- 28. 格式化printf和额外的字符串打印?
- 29. 如何使用变音符打印到文件的字符串?
- 30. 如何在使用python3的文件中打印非ASCII字符?
为什么不使用fwrite的? – 2010-01-26 08:21:11
如果它不是空终止的,那么根据定义它不是一个字符串。 – 2014-08-04 03:36:45
这只是不是一个_c string_,因为这将是在其他语言中一个有效的字符串..虽然是“字符的非空值终止阵列”会更准确,我敢肯定这是普遍理解。 – Willdorf 2016-07-29 19:58:19