为了账号安全,请及时绑定邮箱和手机立即绑定

正确使用strtol

正确使用strtol

C++ C
缥缈止盈 2019-09-03 15:43:05
下面的程序将字符串转换为long,但根据我的理解,它也会返回错误。我依赖的事实是,如果strtol将字符串成功转换为long,那么第二个参数strtol应该等于NULL。当我用55运行以下应用程序时,我收到以下消息。./convertToLong 55Could not convert 55 to long and leftover string is: 55 as long is 55如何成功检测strtol的错误?在我的应用程序中,零是有效值。码:#include <stdio.h>#include <stdlib.h>static long parseLong(const char * str);int main(int argc, char ** argv){    printf("%s as long is %ld\n", argv[1], parseLong(argv[1]));    return 0; }static long parseLong(const char * str){    long _val = 0;    char * temp;    _val = strtol(str, &temp, 0);    if(temp != '\0')            printf("Could not convert %s to long and leftover string is: %s", str, temp);    return _val;}
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

你错过了一个间接层。您想要检查字符是否是终止字符NUL,而不是指针是否NULL:


if (*temp != '\0')

顺便说一下,这不是一个错误检查的好方法。strto*通过将输出指针与字符串的结尾进行比较,不能完成函数族的正确错误检查方法。它应该通过检查零返回值并获得返回值来完成errno。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 1191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信