Я использую 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 к младшей значащей цифре добавление производится к самой значимой цифре.
я нашел это действительно сложно полагать, что ваш компилятор пропускает этот код:
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);
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
обратитесь к документации по этой функции (в документации библиотеки / компилятора)
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;
}
Во-первых, itoa (my_number) может быть неправильным, я знаю только следующую функцию:
char * itoa ( int value, char * str, int base );
str должен быть массивом достаточно длинным, чтобы содержать любое возможное значение:
(sizeof (int) * 8 + 1) для radix = 2, то есть 17 байтов в 16-битных платформах и
33 в 32-битных платформах.