printf的%转换说明符需要一个指向char数组的指针.注意缺乏const.我可以在C中看到这个的原因,并且由于C++包含了C99标准,所以这不会改变.但是,如果我自己编写,我printf可以安全地将参数转换为const char*吗?:
case 's' :
ptr = va_arg(va, const char*);
_puts(ptr, strlen(ptr));
break;
Run Code Online (Sandbox Code Playgroud)
这会有任何意外的语义(注意:我不是在询问未定义的行为,因为这样的实现无论如何都不符合)?
%sC 标准(ISO/IEC 9899:2011 (E))在 7.21.6.1/8 中规定了转换说明符的含义:
如果不存在 l 长度修饰符,则参数应为指向字符类型数组的初始元素的指针。
这个表述显然不够具体,无法判断字符类型是const还是非const。它甚至没有说明是否使用char、signed char、 或。unsigned char我不认为字符数组被定义为 C 标准中的术语。
换句话说:用于转换说明符char const*指定的类型%s就可以了。
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |