c语言 - 仅当字符 * 是有效数字时才使用 strtol 将字符 * 转换为 int



我试图用strtolchar*转换为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;
}
}

最新更新