海峡要塞。 我有一个带有字符串,char和int的结构。 该结构是动态创建的,因为我将在程序的不同部分中使用它。
struct A
{
char staticString[20];
char* dynamicString;
char character;
int integer;
};
我知道是否要创建一个我调用的结构:
A example = (A)malloc(sizeof(A));
为了填充我使用的dynamicString和int:
example->dynamicString = (char*)malloc(sizeof(char*));
example->integer = (int)malloc(sizeof(int));
当我尝试填充staticString和char时,它无法正常运行。 甚至不问我的代码是什么,我从任何地方尝试了很多组合。
除此之外,有人可以向我展示如何写入/读取这些值的示例吗? 预先感谢。
答案 0 :(得分:0)
第一件事:
您正在使用C,并且通过定义结构的方式,您需要像这样声明指针:
struct A *example;
接下来,malloc返回一个指针,因此您需要强制转换为指针(而不是结构):
(struct A *)malloc(sizeof(struct A));
其次,我不确定为什么,但是:
-您正在尝试在结构中动态分配int。如前所述,malloc返回一个指针,因此在您的结构中,您需要一个int指针,例如“ int *integer;
”
-您正在尝试分配动态字符串,但是操作不正确,这就是我认为您想要的
example->dynamicString = (char *)malloc(sizeof(char) * 10);
动态字符串的大小为10。
编辑:
您也可以静态或动态填充结构中的整数,但我认为您打算使用静态方法:
example->integer = 123;
动态方法是(假设您的结构中有int *integer
)
example->integer = (int *)malloc(sizeof(int));
*(example->integer) = 123;
答案 1 :(得分:0)
每次创建新结构时,堆中的内存都设置为:
sizeof(char)* 20 + sizeof(char指针)+ sizeof(char)+ sizeof(int)。
如果您要保存一个将由char指针指向的字符串-那么您要求在堆中分配该字符串的大小-然后malloc将指针返回指向堆上该内存分配的指针。
因此,您已经有一个用于char数组,char指针,char和int的空间,当您要求创建一个新结构时就已分配该空间,而无需再次分配它。
另外,请记住,malloc返回指向堆上已分配位置的指针-因此,如果您malloc(sizeof(int))会得到指向堆上int的内存分配的指针-该指针由一个int指针不是一个int。
祝你好运!