【发布时间】:2016-01-12 16:47:43
【问题描述】:
以下定义是否明确?
const char not_a_c_string[] = { 'h', 'e', 'l', 'l', 'o' };
printf( "%.5s", (const char*) not_a_c_string );
这是一个关于特定形式 "%.5s" 的问题,而不是 如何打印可能不是 NUL 终止的字符串? 因为这个问题有 already been answered here,其中 "%.*s" 构造是建议。
【问题讨论】:
-
查看 dup 接受的答案。何时确定长度无关紧要。只需使用固定大小。不过,我建议避免使用幻数,要么使用带有
WIDTH宏的一点宏魔术,要么仍然显式传递长度。 -
YSC,我根据@rici 先生的评论修改了我的答案。如果您真的想了解精度,请edit 提出问题并添加说明以使其完整。谢谢。
-
我不会撤回我的投票,因为它是重复。 RTFM 怎么样?
printf定义明确。请注意,您指定了字段宽度。 proceision 是另一个字段。 -
很好奇,为什么是
(const char*)?
标签: c printf language-lawyer undefined-behavior