gpt4 book ai didi

c - 如何按顺序将大尺寸的空指针转换为不同类型

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:50 25 4
gpt4 key购买 nike

我希望将我的 void 指针值一个接一个地转换为不同的值。我会使用函数的大小从最后一个类型中添加字节数吗?测试值只是我想用来放置这些值的内存空间。

void* test;

int* a = (int*)test;
*a = 5;

char*b = (char*)(test+sizeof(int));
*b = 'b';

int* c = (int*)(test+sizeof(int)+sizeof(char))
*c = 6;

最佳答案

这最好用 char 指针和 memcpy 来完成。使用 char 指针允许您进行简单的指针数学运算(并避免 strict aliasing rule 的任何麻烦)。使用 memcpy 可避免任何对齐问题。

在下面的函数中,第一个参数是指向内存的指针,第二个参数是以字符为单位的内存大小。

void foo( void *test, int size )
{
if ( size < 2*sizeof(int) + 1 )
return; // buffer is not big enough

char *a = test; // int
char *b = a + sizeof(int); // char
char *c = b + 1; // int

int value = 5;
memcpy( a, &value, sizeof(int) );

*b = 'b';

value = 6;
memcpy( c, &value, sizeof(int) );
}

要将其扩展到任意数量的项目,我将编写如下所示的代码。 (请注意,这里没有安全网,传递给函数的缓冲区必须足够大以容纳所有值。)

void bar( void *test )
{
char *ptr = test;

int value = 5;
memcpy( ptr, &value, sizeof(int) );
ptr += sizeof(int);

*ptr++ = 'b';

value = 6;
memcpy( ptr, &value, sizeof(int) );
ptr += sizeof(int);

// ...
}

关于c - 如何按顺序将大尺寸的空指针转换为不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40053511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com