将[char]变量转换为[int]然后返回[char]

时间:2014-12-11 07:33:47

标签: c++ c arrays atoi itoa

我正在使用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 124


   char 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,而是对最高有效数字进行加法。

4 个答案:

答案 0 :(得分:4)

我觉得非常困难认为你的编译器正在通过这段代码:

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);

答案 1 :(得分:2)

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 :(得分:1)

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 124


   char 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;
}

答案 3 :(得分:0)

首先itoa(my_number)可能是错的,我只知道后面的函数:

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

str应该是一个足够长的数组,以包含任何可能的值:   (sizeof(int)* 8 + 1)radix = 2,即16位平台中的17个字节   33位在32位平台上。