【问题标题】:memcpy and memory locationmemcpy 和内存位置
【发布时间】:2020-07-24 11:58:59
【问题描述】:

根据以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
  int i = 10;
  void *byte = calloc(1, 20);
  int j;
  memcpy((char*)byte, &i, sizeof(int));
  memcpy((char*)&j, byte, sizeof(int));
  printf("%d\n", (int)*byte);
  printf("%d\n", j);
  free(byte);
    return 0;
}

问题出在一行

  printf("%d\n", (int)*byte);

如何打印字节的内容?

【问题讨论】:

  • 也许你想要*(int *)byte

标签: c memcpy


【解决方案1】:

用途:

 printf("%d\n", *(int *)byte);

printf("%c\n", *(char *)byte);

例如i = 65,第一个选项打印65,第二个选项打印A

int main(void){
  int i = 65;
  void *byte = calloc(1, 20);
  int j;
  memcpy((char*)byte, &i, sizeof(int));
  memcpy((char*)&j, byte, sizeof(int));
  printf("%d\n", *(int *)byte);
  printf("%c\n", *(char *)byte);
  printf("%d\n", j);
  free(byte);
  return 0;
}

结果将是:

65
A
65

【讨论】:

  • “第二个选项将打印 A”取决于字节序。
  • 你能解释一下吗?我只知道字符串,它取决于字节序。谢谢
  • 第二个选项也假定主机使用 ASCII 或兼容字符集
  • @rtx,我知道,我同意你说的。谢谢
猜你喜欢
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
相关资源
最近更新 更多