我们都知道溢出可能导致的麻烦,这就是 strn* 存在的原因——而且大多数时候它们是有意义的。但是,我已经看到使用 strncmp 来比较命令行参数的代码,如下所示:
if(... strncmp(argv[i], "--help", 6) == 0
现在,我会认为这是不必要的,甚至可能是危险的(对于更长的参数,很容易误算文字中的字符)。
strncmp 在空值上停止,并且代码已经假定 argv[i] 是空终止的。任何字符串文字都保证以空值结尾,那么为什么不使用 strcmp 呢?
也许我错过了一些东西,但我已经看过几次了,这一次让我很感兴趣,可以问。