如何使用 atoi 分配 char 数组的各个元素?

Posted

技术标签:

【中文标题】如何使用 atoi 分配 char 数组的各个元素?【英文标题】:How do you use atoi to assign individual elements of a char array? 【发布时间】: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 的任何建议?

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于如何使用 atoi 分配 char 数组的各个元素?的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1502 MPI MaeIstrom ( 裸最短路 || atoi系统函数 )

在 C++ 中使用 atoi 将 char 数组转换为 int 值

将 char 数组转换为 atoi 失败

为啥在 c++ 中分配 char 数组元素时,分配的字符被破坏?

如何将char赋给const char *

关于在DSP工程内数组strnpy函数atoi函数的使用心得