如何使用结构体和指针分配内存

时间:2021-07-28 19:48:45

标签: c pointers struct

我有一个名为 TCarro 的结构,具有此属性。

typedef struct {
  char nome[20];
  char placaDoCarro[5];
} TCarro;

我想知道如何动态分配这个变量 struct TCarro *carro;。 例如,当我使用scanf读取汽车数量时,我应该如何分配一些内存以便我可以执行carro[0]->...carro[1]->...、...

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,因为我需要将一个字符串复制到结构体的每个字段中。

相关问题