Приведение массива char в массив int с помощью atoi

Здравствуйте, я пытаюсь преобразовать символ в int. У меня есть массив символов, который был введен через scanf, "10101" и я хочу установить элементы массива int равными элементам массива char.

Пример ввода:

10101

char aBuff[11] = {'\0'};
int aDork[5] = {0};

scanf("%s", aBuff); //aBuff is not equal to 10101, printing aBuff[0] = 1, aBuff[1] = 0 and so on

Теперь хочу aDork[0] равному aBuff[0] который был бы 1,
Ниже то, что я имею до сих пор.

//seems to not be working here
//I want aDork[0] to  = aBuff[0] which would be 1
//But aDork[0] is = 10101 which is the entire string of aBuff   
//aBuff is a char array that equals 10101
//aDork is an int array set with all elements set to 0

int aDork[5] = {0}
printf("aBuff[0] = %c\n", aBuff[0]); //value is 1
aDork[0] = atoi(&aBuff[0]); //why doesnt this print 1? Currently prints 10101
printf("aDork[0] = %d\n", aDork[0]); //this prints 1

printf("aBuff[1] = %c\n", aBuff[1]); //this prints 0
printf("aBuff[2] = %c\n", aBuff[2]); //this prints 1

3 ответа

Решение

Ты спрашиваешь:

aDork[0] = atoi(&aBuff[0]); // why doesnt this print 1? Currently prints 10101

Это происходит потому, что:

&aBuff[0] == aBuff;

они эквивалентны. Адрес первого элемента в массиве совпадает с адресом, который вы получаете при обращении к самому массиву. Итак, вы говорите:

aDork[0] = atoi(aBuff);

которая занимает всю строку в aBuff и оценивает его целочисленное значение. Если вы хотите получить значение цифры, сделайте это:

aDork[0] = aBuff[0] - '0';   // '1' - '0' == 1, '0' - '0' == 0, etc.

и сейчас

aDork[0] == 1;

Рабочий пример: https://ideone.com/3Vl3aI

Этот код работает должным образом, но вы не понимаете, как работает atoi:

Теперь я хочу, чтобы aDork[0] равнялся aBuff[0], что было бы 1

но

aDork[0] = atoi(aBuff);

означает, что aDork[0] будет хранить целочисленное значение aBuff. Значение значения 10101, а не строка "10101"

PS: вам не нужен массив char для aDork:

int aDork = 0;
aDork = atoi(aBuff);

достаточно.

Если предположить, aBuff содержит строку нулей и единиц (которая не превышает длину aDork), следующее передало бы эти значения в целочисленный массив.

for (int i = 0; i < strlen(aBuff); i++)
{
    aDork[i] = (aBuff[i] - '0');
}
Другие вопросы по тегам