我尝试使用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'
字符。
答案 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;
}
}