memcpy 和内存位置
memcpy and memory location
根据下面的代码:
#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);
如何打印字节的内容?
使用:
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
根据下面的代码:
#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);
如何打印字节的内容?
使用:
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