正确使用strtol

下面的程序将字符串转换为long,但根据我的理解,它也会返回错误。我依赖的事实是,如果strtol将字符串成功转换为long,那么第二个参数strtol应该等于NULL。当我用55运行以下应用程序时,我收到以下消息。


./convertToLong 55

Could 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;

}


缥缈止盈
浏览 1192回答 3
3回答

跃然一笑

你错过了一个间接层。您想要检查字符是否是终止字符NUL,而不是指针是否NULL:if (*temp != '\0')顺便说一下,这不是一个错误检查的好方法。strto*通过将输出指针与字符串的结尾进行比较,不能完成函数族的正确错误检查方法。它应该通过检查零返回值并获得返回值来完成errno。
打开App,查看更多内容
随时随地看视频慕课网APP