我们都知道问题溢出可能导致,这就是为什么strn *存在 - 并且大多数时候它们是有意义的。然而,我所看到的,它使用的strncmp比较喜欢这样的命令行参数的代码:我正确地认为strcmp与文字是等价的(并且安全)吗?
现在,我会认为这是不必要的,甚至是危险的(更长的参数,将很容易计数错误的字符字面)。
strncmp在空值处停止,并且代码已经假定argv [i]以空终止。任何字符串文字都保证以null结尾,所以为什么不使用strcmp?
也许我错过了一些东西,但我已经看过几次了,这次它引起了我足够的兴趣。
但遍历字符串不必要的两倍。至少使用(sizeof(“ - help”) - 1)。是的,sizeof在字符串文字上正确工作,因为它们的大小在编译时已知。 – 2009-01-15 21:47:10
另外,不,strlen不计数null。 – 2009-01-15 21:48:13
我不确定字符串文字的大小。一般来说,我会建议C++和std :: string。 :-) – 2009-01-15 21:57:24