如何解决是否定义了带有NULL格式字符串的sprintf行为?
一个初级同事写了这样的东西:
char str[20] = "Normal"; // declared globally
void somefunc(void)
{
sprintf(str,NULL);
if (var == TARGET)
{
sprintf(str,"Set");
}
else
{
sprintf(str,"Normal");
}
}
除了建议使用snprintf
之外,我还在考虑sprintf
对NULL
格式字符串(在函数的第一行)会做什么-不是NULL
value 字符串,但是格式控件本身。在阅读的文档中没有看到任何内容。
这是否包含在标准中,或者也许定义了实现?由于他显然正在运行此代码,因此它一定不会在这里引起分段错误(取消引用NULL
),但是那是标准吗?我是否可以指出“不要这样做”,或者说它绝对安全(按标准/定义)?
充其量看来,这是不必要的声明,但最糟糕的是,我担心另一个编译器可能在这里引起段错误...
解决方法
这种调用会调用未定义的行为,因为(7.21.6.1 fprintf函数;这对sprintf有效)
3格式应为多字节字符序列...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。