c/c++语言开发共享如何确保strtol()已成功返回?

according documentation:

成功时,该函数将转换后的整数作为long int值返回。 如果无法执行有效转换,则返回零值。 如果正确的值超出可表示值的范围,则返回LONG_MAX或LONG_MIN,并将全局变量errno设置为ERANGE。

考虑strtol(str, (char**)NULL, 10); 如果str"0"如何知道函数是否失败或只是将字符串转换为"0"

    如果要进行错误检查,则需要传递一个真实的指针地址,这样就可以区分"0"引起的0值和"pqr"引起的0值相似的值:

     char *endptr; errno = 0; long result = strtol(str, &endptr, 10); if (endptr == str) { // nothing parsed from the string, handle errors or exit } if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE) { // out of range, handle or exit } // all went fine, go on 

    恕我直言,我更喜欢sscanf()atoi()strtol() 。 主要原因是您无法在某些平台(即Windows)上可靠地检查错误状态, 除非您使用sscanf() (如果成功则返回1 ,如果失败则返回0 )。

    由于接受的答案实际上不是检查失败的正确方法。

    您不应通过检查strtol的返回值来检查错误,因为该字符串可能是0l,LONG_MAX或LONG_MIN的有效表示forms。 相反,检查tailptr是否指向数字后的预期(例如,如果字符串应在数字后面结束,则为’ 0’)。 你还需要在通话前清除errno并在之后检查它,以防万一有溢出。

    您可以检查errno或为第二个参数传递非NULL值,并将其结果值与str进行比较,如:

     char * endptr; long result = strtol(str, &endptr, 10); if (endptr > str) { // Use result... } 

      以上就是c/c++开发分享如何确保strtol()已成功返回?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560355.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐