我有一个结构定义为

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*运算符告诉编译器您要分配给地址所指的值。
不要忘记,您还需要通过调用somecharr来释放free(r->somechar)free(r)内存。

08-17 04:41