繁体   English   中英

printf%s const char *

[英]printf %s const char*

printf%转换说明符需要一个指向char数组的指针。 注意缺少const 我可以在C中看到这个的原因,并且由于C ++包含了C99标准,所以这不会改变。 但是,如果我正在编写自己的printf ,我可以安全地将参数转换为const char*吗?:

case 's' :
    ptr = va_arg(va, const char*);
    _puts(ptr, strlen(ptr));
    break;

这会有任何意外的语义(注意:我不是在询问未定义的行为,因为这样的实现无论如何都不符合)?

C标准(ISO / IEC 9899:2011(E))规定了7.21.6.1/8中%s转换说明符的含义:

如果不存在l length修饰符,则参数应该是指向字符类型数组的初始元素的指针。

这个公式显然不够具体,无法判断字符类型是const还是非const 它甚至没有说明是使用了charsigned char还是unsigned char 我不认为字符数组被定义为C标准中的术语。

换句话说:使用char const*作为%s转换说明符指定的类型是可以的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM