【问题标题】:Get int value from string C [duplicate]从字符串C中获取int值[重复]
【发布时间】:2014-02-10 05:50:14
【问题描述】:

鉴于我有以下几点:

char str[] = "1524";
int nr;

我想在“nr”中获取号码1524

在 C 中实现这一目标的最佳方法是什么?

【问题讨论】:

  • 使用 atoi 函数。
  • @Nabla 是的,我做到了。我纠正了。感谢您指出这一点。
  • @OldProgrammer 没错。谢谢你。您应该将其发布为答案。
  • atoi没有错误检测

标签: c string int


【解决方案1】:

最好的错误检测是strtol()

#include <errno.h>
#include <stdlib.h>

char str[] = "1524";
char *endptr;
errno = 0;
long l = strtol(str, &endptr, 10);
if (errno || *endptr != '\0' || str == endptr || l < INT_MIN || l > INT_MAX) {
  Handle_Error();
}
else {
  nr = l;
}

errno 在发生上溢/下溢时变为非零值。
*endptr != '\0' 在末尾检测到额外的垃圾。
str != endptr 检测到像 "" 这样的字符串。
intlong 的范围不同时,需要与INT_MAXINT_MIN 进行比较。
也许更好if (errno == ERANGE ...

【讨论】:

【解决方案2】:

使用atoi函数:

nr = atoi(str);

还有atof(用于floats)和atol(用于longs)

所有这些函数都在&lt;stdlib.h&gt; 中定义。

【讨论】:

    【解决方案3】:

    标准库调用是atoi(),但也有strtol(),它有几个附加功能。 1) 它允许您指定数字基数(例如基数 10),以及 2) 它返回指向字符串中停止解析的位置的指针。

    两者都在标题&lt;stdlib.h&gt;中定义

    【讨论】:

      【解决方案4】:

      atoi 函数会将字符串转换为整数:

      // requires including stdlib.h
      
      int nr = atoi(str);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多