在sscanf中使用format参数作为附加参数是否安全?

时间:2017-05-24 06:53:30

标签: c collision stdio

以下代码是否可以安全使用?我的意思是如果模式可能在一个循环中被扫描和覆盖,或者如果这种冲突从未发生,或者它是依赖于实现的。

char pattern[32] = "%31s";
sscanf("hello",pattern,pattern);

我没有找到关于herehere的任何说明。

(用例:有时我使用pattern作为临时缓冲区。)

1 个答案:

答案 0 :(得分:3)

C11标准(ISO / IEC 9899:2011)涵盖了这一点。它说:

  

7.21.6.7 sscanf函数

int sscanf(const char * restrict s, const char * restrict format, ...);

restrict表示格式不能与任何参数相同。

描述说:

  

如果复制   发生在重叠的对象之间,行为未定义。

你要做的是'未定义的行为'。不要那样做。