我试图用strtol
将char*
转换为int
:
long lnum;
int num;
char *end;
char * str ="3a";
lnum = strtol(str, &end, 10);
printf(" res = %d n" , lnum);
此代码打印3
.
我怎么知道输入不仅仅是数字?我希望此转换失败,因为"3a"
包含一个'a'
字符。
我知道的快速解决方案是检查结尾是否为 \0,这意味着字符串是 emtpy,所以所有原始字符串都是一个数字
你可以比较 *end 与 NULL
if (*end != NULL)
{
printf("failed");
}
如果要将字符串转换为具有溢出和语法检查的int
,则必须在代码中使用额外的测试:
- 检查是否过度
- 检查是否有多余的字符
- 检查 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 != ' ' || lnum < INT_MIN || lnum > INT_MAX) {
printf("invalid input: %sn", input)
return 0;
} else {
num = lnum;
printf("res = %dn" , num);
return num;
}
}