如何使用 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 值