在C中的字符数组中存储int

在C中的字符数组中存储int,c,int,C,Int,我试图将int值存储在char数组中,并在以后再次访问它以检索值。这是我尝试过的,但它并不像我所期待的那样有效 char mem[50]; int* size = (int*)&mem[0]; char* isFree = (char*)&mem[4]; char *t = (char *)&mem[4]; 现在我想按照顺序在char数组中存储1234和'f'。(在前5个字节内) 我不允许使用其他变量,必须使用字符数组 int a = 1234; int *size

我试图将int值存储在char数组中,并在以后再次访问它以检索值。这是我尝试过的,但它并不像我所期待的那样有效

char mem[50];
int* size = (int*)&mem[0];

char* isFree = (char*)&mem[4];

char *t = (char *)&mem[4];
现在我想按照顺序在char数组中存储1234和'f'。(在前5个字节内)

我不允许使用其他变量,必须使用字符数组

int a = 1234;
int *size = &a;

不允许使用上面的字符。

您必须使用类型
unsigned char
来复制内存或memcpy,以便执行此操作。将字符数组别名为int在C中是未定义的

存储值:

int value = 1234;
memcpy( mem, &value, sizeof(value) );
memcpy( &value, mem, sizeof(value) );
检索值:

int value = 1234;
memcpy( mem, &value, sizeof(value) );
memcpy( &value, mem, sizeof(value) );

(数组
mem
必须足够大以容纳int类型)。

您可以使用
sprintf
-

int size=1234;
char mem[50];
sprintf(mem,"%d",size);

注意-这将附加空终止符。

我尝试了另一种方法,并找到了解决方案。我把它贴出来是为了帮助别人

char mem[50];
int* size = (int*)&mem[0];
*size = 1234;

char* isFree = (char*)&mem[4];
*isFree = 'f';

char *t = (char *)&mem[4];

printf("%d\n",*(int*)&mem[0]);
printf("%c\n",*(char*)&mem[4]);

我给一个指针分配了一个指针。我工作过。谢谢大家的回答

你需要阅读指针的基础知识。要存储值,必须执行
*size=1234我不允许使用数组空间以外的其他变量。所以这行不通。我编辑了这个问题。因此,这将更加清楚。INTA=1234;大小=(int*)&a@Haris在分配内存或指向另一个变量后也会这样做。实际上,我正在实现自己的malloc。因此,我正在尝试这项工作。@ameyCU,
size
指向
mem[]
数组的第一个元素。为什么他需要分配内存?谢谢你回答我的问题。但这行不通。我不允许使用数组空间以外的其他变量。如果没有,我可以使用int a=1234来实现这一点;大小=(int*)&a;这就是问题所在为什么不
char
?我在严格别名的描述中看到了这两种情况。是否还有一些我不知道的其他规则?@anatolyg Signed char如果使用补码或符号+幅度,可能会有一个带陷阱表示的值,如果我正确阅读C11标准:6.2.6.2,p2。在选择系统上,
mem[]
可能没有正确对齐
int
数组,因此
int*size=(int*)&mem[0]是UB。