在 sscanf 中使用格式参数作为附加参数是否安全?
Is it safe to use format parameter as additional argument in sscanf?
下面的代码可以安全使用吗?我的意思是,如果模式可能在一个循环中被扫描和覆盖,或者这种冲突从未发生,或者它是否依赖于实现。
char pattern[32] = "%31s";
sscanf("hello",pattern,pattern);
(用例:有时我使用 pattern
作为临时缓冲区。)
C11 标准 (ISO/IEC 9899:2011) 涵盖了这一点。它说:
7.21.6.7 The sscanf
function
int sscanf(const char * restrict s, const char * restrict format, ...);
restrict
表示格式不能与任何参数相同。
描述说:
If copying
takes place between objects that overlap, the behavior is undefined.
你想做的是 'undefined behaviour'。不要那样做。
下面的代码可以安全使用吗?我的意思是,如果模式可能在一个循环中被扫描和覆盖,或者这种冲突从未发生,或者它是否依赖于实现。
char pattern[32] = "%31s";
sscanf("hello",pattern,pattern);
(用例:有时我使用 pattern
作为临时缓冲区。)
C11 标准 (ISO/IEC 9899:2011) 涵盖了这一点。它说:
7.21.6.7 The
sscanf
functionint sscanf(const char * restrict s, const char * restrict format, ...);
restrict
表示格式不能与任何参数相同。
描述说:
If copying takes place between objects that overlap, the behavior is undefined.
你想做的是 'undefined behaviour'。不要那样做。