我正在try 找出在C中是否有将字符串转换为整数的替代方法.

我经常在我的代码中设置以下模式.

char s[] = "45";

int num = atoi(s);

那么,有没有更好的方法呢?

推荐答案

strtol个更好的国际海事组织.另外,我喜欢strtonum,所以如果你有的话,请使用它(但请记住,它不是便携的):

long long
     strtonum(const char *nptr, long long minval, long long maxval,
     const char **errstr);

您可能还对C99中的标准函数strtoumax and strtoimax感兴趣.例如,你可以说:

uintmax_t num = strtoumax(s, NULL, 10);
if (num == UINTMAX_MAX && errno == ERANGE)
    /* Could not convert. */

不管怎样,离atoi远点:

呼叫atoi(str)应等同于:

(int) strtol(str, (char **)NULL, 10)

只是对错误的处理可能有所不同.If the value cannot be represented, the behavior is undefined美元.

C++相关问答推荐

读取输入数据(在 C 中)后,scanf 是否清空缓冲区?

在链表中动态存储数据的问题

C 是否有 [[nodiscard]] 机制在忽略值时发出警告?

C unsigned long 与转换未正确添加

您可以使用 C 内联汇编来对齐指令吗? (没有编译器优化)

C中指向结构的指针与指向数组的指针

如何使用带有 typedef 的注册存储类?

DirectX11 与多视频适配器 (GPU) PC

未定义值的索引处的数组值

使用 strstr 查找子字符串的所有实例会导致奇怪的字符串格式

C 或 C++ 是否保证数组 < 数组 + SIZE?

为什么有 i++;一世 - ;紧随其后?

升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序

即使我将输出重定向到 /dev/null,printf 仍然会产生成本吗?

编译 HTK 时出现“致命错误:bits/libc-header-start.h:没有这样的文件或目录”

为什么我在使用 rand() 时会得到这种特殊的 colored颜色 模式?

“保留用于任何用途”是什么意思?

C 与 C++ 编译不兼容 - 未命名类型

为什么 c = ++(a+b) 会出现编译错误?

将双精度数分配给 C 中的 int 变量的非直观结果