将int值存储到char p []索引中

时间:2016-01-20 05:22:45

标签: c arrays char int

遇到了问题。想出了我的问题。我在网上看了很多,已经阅读了很多可能的解决方案,但似乎没有什么对我有用。

我有这个程序,我们称之为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的索引中存储字符串以及整数。我应该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

charint的类型不同,并且位数不同。你需要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;