我只是想知道这个表达式是否安全:
int main (void)
{
char my_tab[256];
memset(my_tab,0x61,sizeof(my_tab));
printf("Is it safe ? : %.256s",my_tab); /* is it safe ? */
}
Run Code Online (Sandbox Code Playgroud)
是的,你将打印出256个字符,仅此而已.
从C11标准7.21.6.P4:
一个可选的精度,它给出了d,i,o,u,x和X转换的最小位数,a,e,E,f的小数点字符后面出现的位数和F转换,g和G转换的最大有效位数,或s转换要写入的最大字节数.精度采用句点(.)的形式,后跟星号*(稍后描述)或可选的十进制整数; 如果仅指定了句点,则精度为零.如果精度与任何其他转换说明符一起出现,则行为未定义.
7.21.6.1.P8:
s:如果不存在l length修饰符,则参数应该是指向字符类型数组的初始元素的指针.数组中的字符被写入(但不包括)终止空字符.如果指定了精度,则不会写入多少个字节.如果未指定精度或大于数组的大小,则数组应包含空字符.