我有一个结构定义为
typedef struct {
char *somechar;
} Random;
我实例化了这样一个结构-
Random *r=(Random *)malloc(sizeof(Random));
如何将字符逐个分配给somechar?
我用过
r->somechar+0='b';
r->somechar+1='a';
这不管用。
最佳答案
首先,您需要分配由char* somechar
指向的数据:您正在为包含指针而不是指向数据的struct
分配空间你需要分开分配
Random *r = malloc(sizeof(Random));
r->somechar = malloc(20); // allocate space for 20 characters
请注意,您不需要强制转换
malloc
的结果,因为在C中void*
可以隐式转换为任何其他指针类型。此外,必须确保malloc
返回的值是有效地址(因此它是!= NULL
),以确保堆分配没有失败。最后,要访问
char*
的各个元素,您有两个选项:使用正确的索引访问运算符,因此
r->somechar[1] = ..
直接使用指针算法,
*(r->somechar+1) = ..
后者与您正在尝试的类似,但您需要使用dereference
*
运算符告诉编译器您要分配给地址所指的值。不要忘记,您还需要通过调用
somechar
和r
来释放free(r->somechar)
和free(r)
内存。