下面的程序将字符串转换为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。
- 3 回答
- 0 关注
- 1191 浏览
添加回答
举报
0/150
提交
取消