-5

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

4 回答 4

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);
于 2014-12-11T07:39:56.503 回答
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,请查阅此函数的文档(在库/编译器文档中)

于 2014-12-11T07:45:25.353 回答
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;
}
于 2014-12-11T07:46:48.207 回答
0

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

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

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

于 2014-12-11T08:13:22.363 回答