我正在使用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,而是对最高有效数字进行加法。
答案 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位平台上。