以下代码是否可以安全使用?我的意思是如果模式可能在一个循环中被扫描和覆盖,或者如果这种冲突从未发生,或者它是依赖于实现的。
char pattern[32] = "%31s";
sscanf("hello",pattern,pattern);
(用例:有时我使用pattern
作为临时缓冲区。)
答案 0 :(得分:3)
C11标准(ISO / IEC 9899:2011)涵盖了这一点。它说:
7.21.6.7
sscanf
函数int sscanf(const char * restrict s, const char * restrict format, ...);
restrict
表示格式不能与任何参数相同。
描述说:
如果复制 发生在重叠的对象之间,行为未定义。
你要做的是'未定义的行为'。不要那样做。