nmi*_*els 15 c security scanf buffer-overflow
我对那些sscanf
糟糕的建议有着模糊的回忆.我知道如果我使用字段宽度说明符,它不会溢出缓冲区,所以我的记忆只是在玩弄技巧吗?
我认为这取决于你如何使用它:如果你正在扫描类似的东西int
,那很好.如果你正在扫描一个字符串,它不是(除非有一个我忘记的宽度字段?).
编辑:
扫描字符串并不总是安全的.
如果缓冲区大小是常量,那么你当然可以将它指定为类似的东西%20s
.但如果它不是常量,则需要在格式字符串中指定它,并且您需要执行以下操作:
char format[80]; //Make sure this is big enough... kinda painful
sprintf(format, "%%%ds", cchBuffer - 1); //Don't miss the percent signs and - 1!
sscanf(format, input); //Good luck
Run Code Online (Sandbox Code Playgroud)
这是可能但很容易出错,就像我在之前的编辑中所做的那样(忘了处理空终止符).您甚至可能溢出格式字符串缓冲区.