到目前为止,我已经编写了几行来将整数转换为数组。
#include <stdio.h>
int main(int argc, char *argv[]){
int num = 9214;
int count = 3;
char numarray[3];
int temp;
while(num > 0){
temp = num % 10;
numarray[count] = temp;
num /= 10;
count--;
}
printf("Array: ");
for(count = 0; count <= 3; count++)
printf("%d", numarray[count]);
printf("\n\n");
}
输出应为9214.但是,它返回9219。 如果我更改变量 num 5183,它将返回5185。 它将数组的最后一个数字更改为 num 变量的第一个数字。
有没有人知道我搞砸了哪里?
答案 0 :(得分:4)
char numarray[3];
这个数组有3个元素,而不是4个。
for(count = 0; count <= 3; count++)
printf("%d", numarray[count]);
printf
语句访问数组之外的元素(numarray[3]
,但最后一个元素是numarray[2]
)。与numarray[count] = temp;
循环中的while
相同。
要解决您的问题,只需将char numarray[3];
更改为char numarray[4];
。
答案 1 :(得分:0)
numarray太小了。
应该是
char numarray[4];
你的while循环覆盖数组外的内存,你的printf for循环正在查看数组外的内存。
答案 2 :(得分:0)
该数字有4位数,但是你要分配一个大小为3的数组。numarray[3]
的赋值是无效的,并且使用该表达式来访问该值,因为它是未定义的行为。
声明数组时,方括号之间的数字指定数组可容纳的最大元素数,不最大索引的值。访问权基于零,因此int nums[4];
数组中可能的索引值为0,1,2和3.
通常,对于type arr[n]
的任何数组,其中type
是有效类型而n
是文字数字,有效索引值从0
变为{{1 }}