我有一个代码打算在字符串后打印一些空格(以删除最终可能在这里的内容,因为我正在移动光标).
所以,我使用了这样的东西:
int some_length = 0;
char some_string[]="hello world";
printf( "%*c%s\n", some_length, ' ', some_string );
Run Code Online (Sandbox Code Playgroud)
我认为它会产生"hello world",但不会产生"hello world"(请注意,在我的真实代码中,空格是在字符串之后打印的,因为目标是擦除,而不是缩进,我只是这样做有工作样本).
那么,这种行为是有意的吗?由于some_length是0,人们可以合理地希望什么都不打印,对吗?这是一个未定义的行为,或者它可能是一个但是在标准库中(我怀疑它,但是......)?
printf的*修饰符用于指定生成的下一个输出的长度的变量最小宽度,而不是下一个输出的长度的固定宽度.因此,如果使用*并提供0作为长度的数值,则它将无效,因为它表示"打印空格字符,从不打印少于零个字符".