如何在 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' 之后结束。因此,您获得的值表示由各个数组数字串联形成的数字。但我再说一遍:你不能指望数组后面有一个零值字符