gpt4 book ai didi

c - 我怎么知道不确定类型参数的大小

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

const static int VECTOR_BASIC_LENGTH = 20;
struct m_vector
{
void* my_vector;
size_t my_capacity;
size_t my_head;
};

typedef struct m_vector Vector;

Vector creat_Vector(size_t size,void *judge)
{
Vector _vector;
size = size?size:VECTOR_BASIC_LENGTH;
_vector.my_capacity = size;
_vector.my_head = 0;
//How I write the following two lines
_vector.my_vector = malloc(sizeof(*judge) * size);
return _vector;
}

judge的类型不确定,所以我传了一个void指针作为参数。我需要*judge的大小来给_vector.my_vector分配内存,对于例如,如果我使用:

int *a;
creat_Vector(5,a);

我想要下面一行:

_vector.my_vector = malloc(sizeof(*judge)*size);

等于:

_vector.my_vector = malloc(sizeof(*a)*5);

如何实现这个功能,用纯C

最佳答案

您的代码中存在禁止的行为。您在函数 creat_Vector 中静态(在编译时)分配/声明类型为 Vector 的本地 _vector。然后你把这个对象还给外面的世界。但是,当您退出函数时,所有本地数据都已失效。所以,你绝对应该重新考虑这一点。

一个建议是:

int init_Vector(Vector* _vect, size_t size, unsigned int ptr_size)
{
size = size?size:VECTOR_BASIC_LENGTH;
_vect->my_capacity = size;
_vect->my_head = 0;
_vect->my_vector = malloc(size*ptr_size);
if (_vect->my_vector) {
return 0;
}
return 1;
}

然后:

Vector _vector;
char *a;

if (init_Vector(&_vector, 5, sizeof(char)) == 0) {
printf("Success!\n");
}
else {
printf("Failure!\n");
/* treat appropriately (return error code/exit) */
}

/* do whatever with a (if needed) and _vector*/

关于c - 我怎么知道不确定类型参数的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889660/

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