遇到了问题。想出了我的问题。我在网上看了很多,已经阅读了很多可能的解决方案,但似乎没有什么对我有用。
我有这个程序,我们称之为test.c
#include <stdio.h>
int main() {
int x = 21345;
char p[10];
p[0] = x;
printf("%d\n", x);
printf("%d", p[0]);
return 0;
}
正如您猜测的那样,我希望两个printf
语句具有相同的输出。相反,我得到以下输出......
21345
97
我需要21345
p[0]
,当我致电printf("%d", p[0]);
时需要打印21345
,而不是97
有任何帮助吗? :(
编辑:
看起来你们回答了,谢谢!更改为int p[10]
可以解决问题。我有另一个复杂功能,我还需要能够在p
的索引中存储字符串以及整数。我应该如何解决这个问题?
答案 0 :(得分:1)
char
与int
的类型不同,并且位数不同。你需要int p[10];
才能发挥作用。
答案 1 :(得分:1)
你有一组有符号的字符,每个字符占1个字节,最大值为127,最小值为-128。现在x的值需要更多的字节来表示,有一个溢出,它会截断最左边的位,
21345 has the binary representation: 0101 0011 0110 0001
now discard the leftmost byte and you get: 0110 0001 which is 97
答案 2 :(得分:0)
char
只存储1个字节的值,以便您获得该输出。如果您将char p[10]
更改为int p[10]
,您将获得输出。
答案 3 :(得分:0)
char
根本不足以存储21345
。因此编译器只需要低8位并将它们放入char
,因此它变为97
。传递给printf时,它会将其转换回int
,但最高位已经丢失。
答案 4 :(得分:0)
您需要使用int数组而不是char 它应该像
#include <stdio.h>
int main() {
int x = 21345;
int p[10];
p[0] = x;
printf("%d\n", x);
printf("%d", p[0]);
return 0;
}
输出
21345
21345
如果你想对字符串也使用相同的数组,那么使用2维char数组 因为您可以正确地存储4个字符数组的整数值。 所以你需要使用p [10] [4] 现在将int的每个字节存储在相应的char数组索引
中p[0][0] = (x >> (8*0)) & 0xff;
p[0][1] = (x >> (8*1)) & 0xff;
p[0][2] = (x >> (8*2)) & 0xff;
p[0][3] = (x >> (8*3)) & 0xff;