Meh*_*dad 6 c printf abi variadic-functions
我正在创建一个修改过的printf实现,我不确定这些问题的答案.
零是否作为空字符串工作?(被printf("%s", 0)允许吗?)
我猜不是,因为0是一个int.但是这会引发这个问题:
是否NULL作为空字符串?(被printf("%s", NULL)允许吗?)
从逻辑上讲,我认为它应该是肯定的,因为它NULL意味着指针; 但是很多实现似乎都有#define NULL 0,所以我觉得在实践中可能没有.哪个是对的?
指针类型是否必须指向char?(被printf("%s", (void const *)"")允许吗?)
我的猜测是类型并不重要,但我不确定.
情况1是未定义的行为,因为argument(int)的类型与format specifier(char *)所需的类型不匹配.
出于同样的原因,案例2是未定义的行为.NULL允许被定义为值为0的任何整数常量表达式,或者这样的表达式转换为(void *).这些类型都不是char *,因此行为未定义.
出于同样的原因,案例3是未定义的行为.""产生一个指向以null结尾的字符数组(字符串)的有效指针,但是当你将其强制转换为时const void *,它不再具有匹配格式字符串的正确类型.因此行为是不确定的.