如何在 C 编程中将 char 数组转换为 int 数组?
How to convert array of char into array of int in C Programming?
#include<stdio.h>
#include<stdlib.h>
#define LENGTH 5
void convert ( char parray[] ,int array[] )
{
int i;
for (i=0; i< LENGTH; i++)
{
array[i] = atoi(&parray[i]);
printf(" The converted array is %d\n" , array[i]);
}
}
int main ()
{
char parray[LENGTH] = { '7', '1', '4','5' ,'2'};
int iarray[LENGTH];
convert(parray, iarray);
}
******** 输出 *********
The converted array is 71452
The converted array is 1452
The converted array is 452
The converted array is 52
The converted array is 2
But I want the following output like this
The converted array is 7
The converted array is 1
The converted array is 4
The converted array is 5
The converted array is 2
它应该在 array[0]
中存储值 7,在 array[1]
中存储 1 !!!!请帮助
atoi()
用于将字符串(以空字符结尾的字符序列)转换为整数。将单个字符转换为整数,可以将字符减去'0'
(0
的字符编码),因为C规范保证十进制数字的字符编码是连续的。
void convert ( char parray[] ,int array[] )
{
int i;
for (i=0; i< LENGTH; i++)
{
array[i] = parray[i] - '0';
printf(" The converted array is %d\n" , array[i]);
}
}
此声明
array[i] = atoi(&parray[i]);
调用未定义的行为,因为字符数组 parray
不包含字符串:以零字符 '[=13=]'
结尾的字符序列。函数 atoi
需要一个字符串作为它的参数。
你可以这样写
array[i] = parray[i] - '0';
字符 '0'
到 '9'
增加了 1 个代码序列。例如,如果写 '3' - '0' 你会得到整数 3
.
您将单个字符与字符 字符串 混淆了。后者是以 nul
(零值)字符结尾的字符序列(数组),这就是 atoi
函数期望的输入。
要将单个字符数字转换为其数值,只需从该字符的值(即标准保证数字的值是连续的)。
所以,而不是:
array[i] = atoi(&parray[i]);
使用:
array[i] = parray[i] - '0'; // Will work if (and only if) parray[i] is a digit.
您的代码中发生的情况是(偶然)在您的 5 字符数组结束后立即有一个零字节(但您可以不依赖这个), 因此每个 atoi(&parray[i])
调用传递的字符串分别以 '7'
、'1'
、'5'
、'4'
和 '2'
开头字符,并且仅在 '2'
之后结束。因此,您获得的值表示由各个数组数字串联形成的数字。但我再说一遍:你不能指望数组后面有一个零值字符!
#include<stdio.h>
#include<stdlib.h>
#define LENGTH 5
void convert ( char parray[] ,int array[] )
{
int i;
for (i=0; i< LENGTH; i++)
{
array[i] = atoi(&parray[i]);
printf(" The converted array is %d\n" , array[i]);
}
}
int main ()
{
char parray[LENGTH] = { '7', '1', '4','5' ,'2'};
int iarray[LENGTH];
convert(parray, iarray);
}
******** 输出 *********
The converted array is 71452
The converted array is 1452
The converted array is 452
The converted array is 52
The converted array is 2
But I want the following output like this
The converted array is 7
The converted array is 1
The converted array is 4
The converted array is 5
The converted array is 2
它应该在 array[0]
中存储值 7,在 array[1]
中存储 1 !!!!请帮助
atoi()
用于将字符串(以空字符结尾的字符序列)转换为整数。将单个字符转换为整数,可以将字符减去'0'
(0
的字符编码),因为C规范保证十进制数字的字符编码是连续的。
void convert ( char parray[] ,int array[] )
{
int i;
for (i=0; i< LENGTH; i++)
{
array[i] = parray[i] - '0';
printf(" The converted array is %d\n" , array[i]);
}
}
此声明
array[i] = atoi(&parray[i]);
调用未定义的行为,因为字符数组 parray
不包含字符串:以零字符 '[=13=]'
结尾的字符序列。函数 atoi
需要一个字符串作为它的参数。
你可以这样写
array[i] = parray[i] - '0';
字符 '0'
到 '9'
增加了 1 个代码序列。例如,如果写 '3' - '0' 你会得到整数 3
.
您将单个字符与字符 字符串 混淆了。后者是以 nul
(零值)字符结尾的字符序列(数组),这就是 atoi
函数期望的输入。
要将单个字符数字转换为其数值,只需从该字符的值(即标准保证数字的值是连续的)。
所以,而不是:
array[i] = atoi(&parray[i]);
使用:
array[i] = parray[i] - '0'; // Will work if (and only if) parray[i] is a digit.
您的代码中发生的情况是(偶然)在您的 5 字符数组结束后立即有一个零字节(但您可以不依赖这个), 因此每个 atoi(&parray[i])
调用传递的字符串分别以 '7'
、'1'
、'5'
、'4'
和 '2'
开头字符,并且仅在 '2'
之后结束。因此,您获得的值表示由各个数组数字串联形成的数字。但我再说一遍:你不能指望数组后面有一个零值字符!