Невозможно преобразовать элементы массива символов как целые элементы в C - PullRequest
1 голос
/ 05 августа 2020

У меня есть массив символов с целыми элементами, например data [4] = {"1234"}. Я хочу преобразовать его в целые элементы. Самый простой способ - вычесть 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;
}

1 Ответ

10 голосов
/ 05 августа 2020

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', где i равно 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;
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ gcc -Wall c.c
pi@raspberrypi:/tmp $ ./a.out
num1 = 1
num2 = 2
num3 = 3
num4 = 4
pi@raspberrypi:/tmp $ 

Исходя из этого, я призываю вас прекратить использовать atoi , потому что atoi("aze") возвращает 0 без сообщения об ошибке. Вместо этого вы можете использовать strtol или scanf с форматом "%d" проверка scanf возвращает 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...