Преобразование переменной [char] в [int], а затем обратно в [char]

Я использую Visual C 6

Я пытаюсь преобразовать массив символов (одинарные кавычки) в целое число, затем увеличить значение на 1, а затем сохранить результат обратно в другой массив символов ..

Но я продолжаю получать неожиданное значение при преобразовании обратно в символ ..

Вот мой код

   char char_array[4];
char_array[0] = '1';
char_array[1] = '2';
char_array[2] = '3';
char_array[3] = '\0';  //Terminating character

int my_number = atoi(char_array);
printf("my_number = %d" , my_number);   // output is 123

my_number++;    // works and my_number is incremented =124
printf("now: my_number = %d" , my_number);   // output is 124char result[4];  //declared to store the result

result = itoa(my_number);  // Output is unexpected.

printf("%c", result[0]);    // Output is  2  instead of 1
printf("%c", result[1]);    // Output is  2
printf("%c", result[2]);    // Output as  3   instead of 4

Кажется, что функция itoa() как-то знает первоначальное значение 123 и каким-то странным образом знает, что я увеличил это значение … но сложение сделано с неправильной цифрой. Вместо добавления 1 к младшей значащей цифре добавление производится к самой значимой цифре.

-5

Решение

я нашел это действительно сложно полагать, что ваш компилятор пропускает этот код:

char result[4];  //declared to store the result
result = itoa(my_number);  // Output is unexpected.

По одной причине вы пытаетесь переустановить массив. Что не должно быть разрешено. Для другого, itoa() обычно занимает три аргументы. Его прототип должен выглядеть так:

char *itoa(int value, char * str, int base);

Так что вы должны называть это так:

char result[4];
itoa(my_number, result, 10);

Или, если вы хотите использовать переносимые функции, которые не имеют возможных переполнений буфера:

char result[4];
snprintf(result, 4, "%d", my_number);
4

Другие решения

itoa является не стандартная функция библиотеки C.

Ты можешь использовать

char result[sizeof(int) * CHAR_BIT / 10 * 3 + 4];  // '-1', '\0', max sizeof int on my 4 byte machine
// 10 bits are roughly equal to 3 digits at decimal base, extra 4 for '-', '\0', extra digit and safe character
sprintf(result, "%d", my_number);

Если вы все еще хотите использовать itoaобратитесь к документации по этой функции (в документации библиотеки / компилятора)

2

my_number увеличивается и, следовательно, если вы используете itoa() тогда он будет знать новое значение my_number, равное 124.

Проверьте код ниже:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char char_array[4];
char_array[0] = '1';
char_array[1] = '2';
char_array[2] = '3';
char_array[3] = '\0';  //Terminating character

int my_number = atoi(char_array);
printf("my_number = %d" , my_number);   // output is 123

my_number++;    // works and my_number is incremented =124
printf("now: my_number = %d" , my_number);   // output is 124char result[4];  //declared to store the result

snprintf(result,4,"%d",my_number);
printf("%c", result[0]);
printf("%c", result[1]);
printf("%c", result[2]);
return 0;
}
1

Во-первых, itoa (my_number) может быть неправильным, я знаю только следующую функцию:

char *  itoa ( int value, char * str, int base );

str должен быть массивом достаточно длинным, чтобы содержать любое возможное значение:
(sizeof (int) * 8 + 1) для radix = 2, то есть 17 байтов в 16-битных платформах и
33 в 32-битных платформах.

0
По вопросам рекламы [email protected]