c-是否定义了带有"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字符串,而是格式控件本身。在我读过的文档中,我什么也没看到。

这是否包含在一个标准中,或者可能是定义了实现?因为他显然在运行这个代码,所以它一定不会导致这里的分段错误(取消引用NULL(,但这是标准的吗?我能指出什么吗;不要这样做&";,或者它可能是完全安全的(根据标准/定义(?

往好了说,这似乎是一个不必要的语句,但往坏了说,我担心另一个编译器可能会导致这里的segfault。。。

这样的调用调用未定义的行为是因为(7.21.6.1 fprintf函数;这对sprintf有效(

3格式应为多字节字符序列。。。

最新更新