首页 > 解决方案 > 我应该如何验证从 argv 传入的整数值不会溢出?

问题描述

我有一个程序要求用户输入一个整数作为命令行参数,格式为./program 100.

显然这会将值作为字符串读取,因此我需要将其解析为整数。我必须确保输入值不会溢出整数变量。我已经阅读过strtol(),但它适用于long变量,我必须坚持使用常规的int.

有没有类似的东西可以用于 a int

标签: c

解决方案


你可以用strtol这个。您首先需要检查此函数是否无法转换值。如果转换成功,则检查该值是否在 to 范围INT_MININT_MAX

errno = 0;
long x = strtol(argv[1], NULL, 10);
if (errno) {
    perror("conversion failed");
} else if (x < INT_MIN) {
    printf("value too small\n");
} else if (x > INT_MAX) {
    printf("value too big\n");
} else {
    printf("value = %ld\n", x);
}

请注意,无论long大小相同int或更大,这都将起作用。

如果sizeof(long) > sizeof(int)INT_MINandINT_MAX检查将捕获值适合 along但不适合 的情况int。如果sizeof(long) == sizeof(int),超出范围的值将导致errno设置为非零以捕获错误,并且INT_MININT_MAX情况永远不会为真。


推荐阅读