【问题标题】:Storing int value into char p[] index将 int 值存储到 char p[] 索引中
【发布时间】:2016-01-20 05:22:45
【问题描述】:

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

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

【问题讨论】:

  • 你能改变 char p[10];到 int p[10];?
  • #include &lt;limits.h&gt;中检查CHAR_MAX
  • 这确实有效,Stitch 博士。如果我将其更改为int p[10],我可以将字符串连接到p 的索引中吗?

标签: c arrays char int


【解决方案1】:

charint 的类型不同,并且位数也不相同。你需要int p[10]; 才能工作。

【讨论】:

  • 这确实解决了我发布的问题!如果我将其更改为int p[10],是否可以将连接字符串放入p 的索引中?
  • 连接字符串是什么意思?你有一个你想要做什么的例子吗?
【解决方案2】:

您有一个带符号字符的数组,它们每个占用 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

【讨论】:

    【解决方案3】:

    char 仅存储 1 个字节值,以便您获得该输出。如果您将char p[10] 更改为int p[10],您将获得输出。

    【讨论】:

      【解决方案4】:

      char 根本不足以存储21345。因此编译器只取低 8 位并将它们放入char,所以它变成97。传递给 printf 时,它会将其转换回int,但最高位已经丢失。

      【讨论】:

        【解决方案5】:

        你需要使用 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 
        

        如果您也想对字符串使用相同的数组,请使用二维字符数组 因为您可以正确地将整数值存储在 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;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-31
          • 1970-01-01
          相关资源
          最近更新 更多