strcmp()
,并表示类似以下的话:
或者(在Why does my string comparison fail?中):我也强烈建议你现在就开始习惯使用strncmp(),以避免今后出现许多问题。
他们指的是什么问题?确保使用strncmp而不是strcmp。strcmp非常不安全。
scanf()
使用字符串格式化符号和gets()
都不被推荐使用,因为它们几乎总是导致缓冲区溢出漏洞。但是,使用strcmp()
不可能导致缓冲区溢出,对吗?
"缓冲区溢出是一种异常情况,程序在向缓冲区写入数据时,越过了缓冲区的边界并覆盖了相邻的内存。"
( -- 维基百科:缓冲区溢出).
由于strcmp()函数从不写入任何缓冲区,所以strcmp()函数不会导致缓冲区溢出,对吗?
为什么人们不推荐使用strcmp()
,而是推荐使用strncmp()
呢?
strncmp()
和strcmp()
一样好(或不好)。 - P.Pstrncmp
仅仅是为了解决未以 null 结尾的字符串,而并没有解决本质问题,即你有一个未终止的字符串。在下一个假定它以 null 结尾的函数中它只会出现混乱。 - Schwern