在C语言中,如何将一个字符数组的整个值赋给一个位置的另一个十六进制数组?

在C语言中,如何将一个字符数组的整个值赋给一个位置的另一个十六进制数组?,c,arrays,pointers,hex,C,Arrays,Pointers,Hex,我想将十六进制值格式(如“0x12”)从另一个数组存储到一个位置的数组中。我可以转换为十六进制字符串,如“0x12”,但不能将整个值分配到数组的一个位置。 我能知道我哪里做错了吗 char b[5]; int a= 20; char hex[5]; sprintf(hex,"0x%d",a); printf("hex: %s\n",hex); b[0]=hex; printf("b[0]: %s\n",b); 预期结果: hex: 0x2

我想将十六进制值格式(如“0x12”)从另一个数组存储到一个位置的数组中。我可以转换为十六进制字符串,如“0x12”,但不能将整个值分配到数组的一个位置。 我能知道我哪里做错了吗

    char b[5];
    int a= 20;
    char hex[5];
    sprintf(hex,"0x%d",a);
    printf("hex: %s\n",hex);
    b[0]=hex;
    printf("b[0]: %s\n",b);
预期结果:

hex: 0x20,
b[0]: 0x20
实际结果:

hex: 0x20,
b[0]:

撇开十进制20的十六进制等价物是0x14而不是0x20这一事实不谈,如果要将C字符串“0x20”存储在数组中的单个位置,那么该数组必须是已分配的
char*
数组或
char[]
数组,如下所示:

指针:

int main(int argc, char *argv[]) {
  char **b;
  int i;
  int a = 20;

  b = calloc(5, sizeof *b);
  if (b == NULL) {
    printf("Malloc failed");
    return 1;
  }
  for (i = 0; i < 5; i++) {
    b[i] = malloc(sizeof b[0]);
    if (b[i] == NULL) {
      printf("malloc failed - fatal error");
      // here should be code to free the values that WERE allocated.
      return 1;
    }
  }
  sprintf(b[0], "0x%d", a);
  printf("hex: %s\n", b[0]);
  printf("b[0]: %s\n", b[0]);
  a = 30;
  sprintf(b[1], "0x%d", a);
  printf("hex: %s\n", b[1]);
  printf("b[1]: %s\n", b[1]);
  return 0;
}
int main(int argc, char* argv[]) {
    char hex1[5];
    char hex2[5];
    char hex3[5];
    char hex4[5];
    char hex5[5];
    char b[5][5] = { hex1, hex2, hex3, hex4, hex5 };
    int a= 20;

    sprintf(b[0],"0x%d",a);
    printf("hex: %s\n",b[0]);
    printf("b[0]: %s\n",b[0]);
    a = 30;
    sprintf(b[1], "0x%d", a);
    printf("hex: %s\n", b[1]);
    printf("b[1] %s\n", b[1]);
  return 0;
}

或者两者的任何合理组合。

b[0]
是一个
char
;它不能保存字符数组请读取C中字符的含义。以0结尾的字符序列的概念也很有用,这些字符序列由
char*
引用,即指向
char
的指针。这就是C中用于存储“字符串”的内容,而C中不存在“字符串”。如果将整数值20赋给合适的变量
x
,则
x=0x20将为真。你知道,是吗?是的,它不能容纳字符数组。我直接存储a[0]=0x20,这是可能的。但是如何将“0x20”存储到一个位置的数组中?有办法吗@markbenningfield如果要将字符数组复制到数组中的单个位置,则该数组必须是已分配的
char*
数组或
char[]
数组。