无法将字符数组元素转换为 C 中的整数元素

use*_*780 1 c

我有带有整数元素的字符数组,例如 data[4]={"1234"}。我想把它转换成整数元素。可能有最简单的方法 ie 从每个数组元素中减去 48 以获得相应的整数。在这里,我正在使用 atoi() 函数但没有得到预期的结果。当前输出: 1234 、 234 、 34 、 4

预期输出: 1 , 2 , 3 , 4 我应该如何得到它?

#include<stdio.h>
#include<string.h>

int main(void)
{
  int num0;
  int num1;
  int num2;
  int num3;
  char data[6]={"1234"};

  num0 =atoi(&data[0]);
  printf("num0 =%d\n",num0);

  num1 =atoi(&data[1]);
  printf("num1 =%d\n",num1);

  num2 =atoi(&data[2]);
  printf("num2 =%d\n",num2);

  num3 =atoi(&data[3]);
  printf("num3 =%d\n",num3);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

bru*_*uno 10

atoi使用所有字符串进行转换,而不仅仅是第一个字符。然后

  • &data[0]data“1234”=>atoi(&data[0])返回 1234
  • &data[1]data+1“234”=>atoi(&data[1])返回 234
  • &data[2]data+2“34”=>atoi(&data[2])返回 34
  • &data[3]data+3“4”=>atoi(&data[3])返回 4

你想要做这样的事情data[i] - '0'在那里是0..3

#include <stdio.h>

int main(void)
{
  char data[] = {"1234"}; /* or const char * data = "1234" */
  int i;

  for (i = 0; i != 4; i += 1)
    printf("num%d = %d\n", i+1, data[i] - '0');

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译和执行:

pi@raspberrypi:/tmp $ gcc -Wall c.c
pi@raspberrypi:/tmp $ ./a.out
num1 = 1
num2 = 2
num3 = 3
num4 = 4
pi@raspberrypi:/tmp $ 
Run Code Online (Sandbox Code Playgroud)

除此之外,我鼓励您停止使用atoi,因为atoi("aze")返回 0 而不发出错误信号。相反,您可以使用strtolscanf与格式"%d"检查scanf返回 1。