0

这是我的代码

 int a;
char array[10];

printf("Enter a number \n");
scanf("%d", &a);
array[1] = a;


printf("array = %d\n",array[1]);

问题是如果我输入一个大于 4 的数字,例如 12345,那么它将打印其他内容而不是 12345

一些帮助我

4

5 回答 5

5

你有 char 类型的数组。char 的大小为 1 个字节,因此它适合从 -128 到 127 的值。任何更大的值都会溢出。如果您想存储更大的值,请使用不同的类型 - short、int,如果需要,甚至可以使用 long long。

于 2013-10-30T11:46:52.133 回答
1

我认为你错过了几件事。

首先:数组从索引 [0] 开始——是否有任何理由从索引 1 开始?

其次,正如其他人指出的那样,数组char(即-128 和127 之间的数字)不会存储该范围之外的数字。

第三,我认为您想要的是将二进制数转换a为字符串array。为此,您需要使用sprintf()(在 C 的情况下,或itoa在 C++ 的情况下):

#include<stdio.h>
int main() {
  int a;
  char array[10];
  printf("Enter a number \n");
  scanf("%d", &a);
  sprintf(array,"%d",a); 
  printf("array = %s\n",array);
}
于 2013-10-30T12:41:07.817 回答
1

为什么要将 int 存储到 char 数组中.. 的大值a会溢出..

如果您在代码中解释您要尝试做什么,我们可以为您提供更多帮助.. 因为我看不出有任何理由让您将 an 存储intchar数组中

于 2013-10-30T11:47:41.860 回答
0

你有几个错误:

所以如果你想打印你输入的内容,试试这个:

printf("a = %d\n", a);

但是,如果你真的想开始将东西放入数组中,让我们谈谈一些事情......

首先,数组是 0 索引的,所以array[1] = a你会做 `array[0] = a'而不是

其次,这是将一个int(很可能是 32 位)转换为char(很可能是 8 位)。所以你可以拥有的最大数量是255(实际上这可能会有点混乱......标准没有指定charsignedunsigned。因此,最大值实际上可能是127!)。

如果你解释你的最终目标是什么,我可以进一步扩展。

于 2013-10-30T11:49:04.150 回答
0

嗯,这段代码在很多层面上似乎都是错误的。

您正在将数字扫描为字符串,然后将其分配给整数而不使用stoi(). 因此,唯一相同的 b/warray[1]和您扫描的数字a将是它们的二进制表示在某种程度上匹配(最多 1 个字节)。

如果您要扫描 10 位数字,只需使用:

long long int a;
scanf("%10lld", &a);
于 2013-10-30T11:49:23.680 回答