gpt4 book ai didi

c - 类型转换 void 指针到 int 和 string

转载 作者:行者123 更新时间:2023-12-03 02:21:15 25 4
gpt4 key购买 nike

我想做的是将值存储在 Element struczs 数组中(具有成员 void* data)

typedef struct {
void* data
} Element;

我已将数组分配为具有 3 个元素

Element* array = malloc(3 * sizeof(Element));

我知道如果 data 是 int 你可以这样做,但是如果 data 是 void *

array[0].data = 65;

我尝试过打字

((*int)(array[0].data)) = 65;

但我在“int”之前收到消息预期表达式

我的第二个问题是如何在 Element 结构中存储字符串(我无法创建另一个必须使用 void 指针的字符串成员)

我可以使用 strcopy 或 sscanf 吗?

下面是主要示例,以防我做错了什么

#include "test.h"
int main (void)
{
Element* array = malloc(3 * sizeof(Element));
((*int)(array[0].data)) = 65;
((*int)(array[1].data)) = 64;
((*int)(array[2].data)) = 66;
}

编辑

抱歉,我应该添加数据将根据 user3386109 答案使用循环添加(迭代基于用户输入,因此 arrayOfElements 可以有 5,8,20 等元素)

Element* arrayOfElements = malloc(3 * sizeof(Element));
arrayOfElements[0].data = malloc( sizeof(int) );
int *ptr = arrayOfElements[0].data;
*ptr = 65;

工作完美,但如果我想让 arrayOfElements[1].data = 67

Element* arrayOfElements = malloc(3 * sizeof(Element));
arrayOfElements[1].data = malloc( sizeof(int) );
int *ptr = arrayOfElements[1].data;
*ptr = 76;

即使我执行 free(ptr) ,我也无法重用 *ptr ,如果您不知道 arrayOfElements 将有多少个元素,是否可以这样做?

最佳答案

问题中的malloc创建了一个包含三个结构的数组。每个struct都有一个未初始化的指针,称为data。在使用该指针之前,必须通过再次调用 malloc 来初始化它。

存储int:

array[0].data = malloc( sizeof(int) );
int *ptr = array[0].data;
*ptr = 65;

存储字符串:

array[0].data = malloc( strlen(str) + 1 );
strcpy( array[0].data, str );

这是一个完整的示例,展示了如何初始化数组、打印数组的元素,然后释放数组。请注意,ptr 只是一个临时变量,用于避免与转换和取消引用 void * 相关的令人讨厌的语法。 (一个好的编译器会优化 ptr 变量。)

int main( void )
{
int *ptr;
char *str = "hello";

Element *array = malloc(3 * sizeof(Element) );

array[0].data = malloc( sizeof(int) );
ptr = array[0].data;
*ptr = 65;

array[1].data = malloc( strlen(str) + 1 );
strcpy( array[1].data, str );

array[2].data = malloc( sizeof(int) );
ptr = array[2].data;
*ptr = 76;

ptr = array[0].data;
printf( "%d\n", *ptr );
str = array[1].data;
printf( "%s\n", str );
ptr = array[2].data;
printf( "%d\n", *ptr );

for ( int i = 0; i < 3; i++ )
free( array[i].data );
free( array );
}

关于c - 类型转换 void 指针到 int 和 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40148163/

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