那么这个问题就是关于C和C++的问题strcmp.
我遇到了这个链接:C库函数 - strcmp().
在这里,它解释了返回值strcmp.我知道每个功能,无论多么安全,都会失败.因此,我知道甚至strcmp可能在某个时候失败.
此外,我遇到了这个问题,也解释了返回值strcmp.经过大量搜索,我找不到一个解释如何检查是否strcmp会失败的网站.
我首先想到它会返回-1,但事实证明,如果第一个字符串较小,它会返回数字<0.那么有人可以告诉我如何检查是否strcmp失败.
编辑:好吧,我不明白strcmp没有失败的意义.函数失败的方法有很多种.例如,在一条评论中,写道如果堆栈没有扩展,可能会导致堆栈过低.没有任何语言的程序是绝对安全的!
rua*_*akh 13
没有明确的情况strcmp可能会失败.
您可以通过传递无效参数来触发未定义的行为,例如:
但在这种情况下strcmp,绝对不能保证其行为 - 允许只是开始擦除硬盘驱动器,或从您的电子邮件帐户发送垃圾邮件,或者是什么 - 所以它不需要明确指出错误.(实际上,在典型的C或C++实现中,唯一strcmp真正可以检测和处理的无效参数是空指针情况,您可以在调用之前轻松检查strcmp.因此错误指示器将没有用处.)
如果你查阅strcmp一些文档,你会发现类似的东西
"如果lhs或rhs不是指向以null结尾的字符串的指针,则行为是不确定的.
这意味着它可能会崩溃,或导致小的红色守护进程从鼻子中飞出,或者其他什么.既然未定义的行为可能是你无辜地认为会发生的事情(没有错,正如你所看到的那样),就会发生,没有确定的方法来识别它.虽然你会认识到崩溃.
因此,作为程序员,您无法在事后检查未定义的行为.
但编译器可以为您添加此类检查,包括此类的多种未定义行为,因为它完全负责该行为.它是否会这样做取决于编译器.此外,您可以添加检查,例如包装函数,最大限度地减少未定义行为的可能性,尽管使用非终止字符串,没有实际的检查方式,我知道这本身不会调用未定义的行为.
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |