【问题标题】:How do you use atoi to assign individual elements of a char array?如何使用 atoi 分配 char 数组的各个元素?
【发布时间】:2010-07-14 23:39:00
【问题描述】:

所以我们可能都知道,atoi 将字符转换为数字。但是,如果你只想要一个数组元素而不是整个数组,你会怎么做?

请看以下内容:

for (h = 0; h < 5; h++)
{
    num[h] = atoi(temp[h]);
}

假设 num 是 int 类型的数组,而 temp 是 char 类型的数组。这给了我一个恼人的转换问题:

从 'char' 到 'const char *' 的无效转换

关于如何使用 atoi 将 char 数组的单个元素转换为 int 的任何建议?

【问题讨论】:

    标签: c atoi


    【解决方案1】:

    如果你只想转换单个字符你不需要使用atoi():

    if (temp[h] >= '0' && temp[h] <= '9')
    {
        num[h] = temp[h] - '0';
    }
    else
    {
        // handle error:  character was not a digit
    }
    

    在 C 中,每个数字的值都比前一个数字的值大一,因此可以保证这样。

    atoi() 不起作用的原因是因为它使用const char* 作为参数,而不是char。该指针必须指向一个以空结尾的字符串。

    【讨论】:

    • 好的...我认为您需要使用 atoi() 进行转换。谢谢。
    • @kriss:感谢分号!糟糕!
    • C 没有定义字符编码,所以这不是“保证工作”。您假设字符编码是 ASCII(或具有所需属性),这可能是一个合理的假设,但重要的是要知道这是一个假设,而不是保证。
    • @.yahoo.co: "在源和执行基本字符集中,上述十进制数字列表中 0 后的每个字符的值都应比前一个字符的值大一" (C99 §5.2.1/3)。
    • @James McNelis Yow,不知道。我还在考虑C89。谢谢。
    【解决方案2】:

    除了使用 James 所示的整数值之外,您还可以将其放在单独的缓冲区中:

    char buf[2] = { temp[h], '\0' };
    num[h] = atoi(buf);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      相关资源
      最近更新 更多