我对 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
这是可能的,但非常容易出错,就像我在之前的编辑中所做的那样(忘记处理空终止符)。您甚至可能会溢出格式字符串缓冲区。
关于c - sscanf 是否被认为可以安全使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873402/