%.在s中的printf语句中的#s格式说明符

sil*_*ker 4 c string printf format-specifiers

请解释输出.是什么%.#sprintf()意思?

#include<stdio.h>
#include <stdlib.h>

int main(int argc,char*argv[]){

    char *A="HELLO";
    printf("%.#s %.2s\n",A,A);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

#s HE
Run Code Online (Sandbox Code Playgroud)

Yu *_*Hao 6

这是未定义的行为.#printf格式说明装置的替代形式,但是根据标准,#仅与一起使用o,a,A,x,X,e,E,f,F,g,G,不包括s.

C11§7.21.6.1 fprintf功能第6节

#结果转换为"替代形式".对于o转换,它会增加精度,当且仅在必要时,强制结果的第一个数字为零(如果值和精度都是0,0则打印单个数字).对于x(或X)转换,非零结果具有0x(或0X)前缀.对于a,A,e,E,f,F,g,和G转换,转换浮点数的结果总是包含一个小数点字符,即使没有数字跟随它.(通常情况下,小数点字符出现在仅当一个数字如下它这些转换的结果).对于gG转换,尾随零不会从结果中移除.对于其他转换,行为未定义.

例如,在我的机器上,输出是不同的: %.0#s HE