我有一个名为 TCarro 的结构,具有此属性。
typedef struct {
char nome[20];
char placaDoCarro[5];
} TCarro;
我想知道如何动态分配这个变量 struct TCarro *carro;
。
例如,当我使用scanf
读取汽车数量时,我应该如何分配一些内存以便我可以执行carro[0]->...
、carro[1]->...
、...
答案 0 :(得分:4)
要为结构动态分配内存,可以使用以下方法:
TCarro *carVariable=malloc(sizeof(TCarro)*someNumbers);
,其中 someNumbers
是您要分配的元素数。
根据您在评论中发布的错误,我假设您尝试执行以下操作:
printf("%d",carVariable);
由于您在 printf (%d
) 中指定了整数说明符,编译器希望函数接收一个整数,但您却给它一个 struct TCarro
。
所以现在您可能想知道,我可以使用什么说明符来打印我的 carVariable
?
C 实际上并没有提供这样的说明符,因为结构是由程序员创建的类型,所以它不知道如何打印它。
如果您想打印变量,您可以做的是打印数组的每个单独元素。
像这样:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
char nome[20];
char placaDoCarro[5];
}TCarro;
int main(void){
size_t someNumbers=10; //if you want to allocate 10 cars
TCarro *carVariable=malloc(sizeof(TCarro)*someNumbers);
//notice that struct before TCarro is not needed, as you defined it as an existing type (named TCarro)
strcpy(carVariable[0].nome,"Mercedes");
strcpy(carVariable[0].placaDoCarro,"xxxx");
strcpy(carVariable[1].nome,"Ford");
strcpy(carVariable[1].placaDoCarro,"xxxx");
//printf cars
printf("%s %s\n",carVariable[0].nome, carVariable[0].placaDoCarro);
printf("%s %s\n",carVariable[1].nome, carVariable[1].placaDoCarro);
free(carVariable);
return 0;
}
请注意,我使用了 strcpy
,因为我需要将一个字符串复制到结构体的每个字段中。