使用atoi来检查字符串

时间:2014-02-04 19:15:30

标签: c string atoi

我正在尝试使用atoi将字符串转换为int,然后检查字符串是否确实是整数。

这是我的代码:

printf("Please input the port: ");
scanf("%s",port_number);
int i = atoi(port_number);
if(i != port_number)
{
    errno = ERR_INVALID_PARAM;                  
    printf("Error invalid port number\n");
}

但是,即使我的字符串“port_number”是一个整数,它仍然在if语句中?有什么帮助吗?

4 个答案:

答案 0 :(得分:2)

在将字符串转换为int之前,需要对字符串进行一些错误检查。您可能想尝试strtol()函数。它检查字符串是否可以转换为long int。它返回转换后的值,如果无法转换字符串,则返回零。

第二个arg to strtol()是一个char **。函数完成后,它指向字符串中不是合法数字字符的第一个字符。因此,如果它指向字符串结尾之前的任何位置,则转换失败。

http://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm

答案 1 :(得分:1)

我假设port_number的类型为char *。

你在那里的if语句是将port_number C字符串的地址与i的值进行比较,我认为这不是你想要做的。

如果要使用ctype.h,则可以使用函数“isdigit()”来检查port_number的每个元素。否则,接下来最好的事情是遍历port_number,并确定每个元素是否在ascii char'0'和'9'之间,以确保正确输入端口号。

答案 2 :(得分:0)

想想你在那里比较的东西:

if(i != port_number)
{
    //code
}

我是int类型,port_number是char *。

答案 3 :(得分:0)

char *check = strdup(port_number);
sprintf(check, "%i", i);
if(strcmp(check, port_number))