Приведение массива 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');
}