仅在有效数字时使用strtol将char *转换为int

时间:2019-12-08 15:45:14

标签: c validation strtol

我尝试使用char*int转换为strtol

long lnum;
int num;
char *end;

char * str ="3a";
lnum = strtol(str, &end, 10);

printf(" res = %d \n" , lnum);

此代码显示3

我怎么知道输入不仅是数字?我希望此转换失败,因为"3a"包含一个'a'字符。

3 个答案:

答案 0 :(得分:1)

我想到的快速解决方案是检查结尾是否为\ 0,表示字符串为空,因此所有原始字符串都是数字

答案 1 :(得分:0)

您可以将* end与NULL进行比较

if (*end != NULL)
{
    printf("failed");
}

答案 2 :(得分:0)

如果要通过溢出和语法检查将字符串转换为int,则必须在代码中使用额外的测试:

  • 检查是否过量
  • 检查多余的字符
  • 检查结果的整数范围

这是修改后的版本:

#include <errno.h>
#include <limit.h>
#include <stdlib.h>

int convert_str(const char *str) {
    long lnum;
    int num;
    char *end;

    errno = 0;
    lnum = strtol(str, &end, 10);
    if (errno || *end != '\0' || lnum < INT_MIN || lnum > INT_MAX) {
        printf("invalid input: %s\n", input)
        return 0;
    } else {
        num = lnum;
        printf("res = %d\n" , num);
        return num;
    }
}