Escreva um programa para fazer a alocação dinâmica dos blocos de dados conforme solicitado abaixo:
Vetor para armazenar 50 registros contendo: nome do produto ( 30 caracteres), código do produto (inteiro) e preço em reais.

Passo 1

Neste exercício queremos criar um programa em C que faça alocação dinâmica de um vetor com 50 registros de produtos. Cada registro tem um nome (até 30 caracteres), um código inteiro e um preço em reais. O conceito chave aqui é usar malloc para reservar memória em tempo de execução e free para liberar ao final.

Passo 2

Primeiro vamos definir uma struct chamada Produto que agrupa as três informações: nome, código e preço. Isso facilita tratar cada produto como um único objeto.
Em seguida usamos malloc para reservar espaço para 50 estruturas Produto. Como malloc retorna void*, precisamos fazer um cast para (Produto *). Também devemos checar se o retorno não é NULL, para garantir que a alocação deu certo.

Passo 3

Depois de alocar, percorremos o vetor em um laço for para ler os dados do usuário. Para ler strings com scanf sem causar estouro de buffer, usamos o especificador %30s (ou %30[^\n]) já que o nome tem no máximo 30 caracteres.

Passo 4

Por fim, após usar os dados (por exemplo, imprimindo os produtos), chamamos free para devolver a memória ao sistema e encerramos o programa. Isso evita vazamentos de memória.

Resposta

#include <stdio.h>
#include <stdlib.h>
#define N 50
typedef struct {
char nome[31]; // até 30 caracteres + ‘\0’
int codigo;
float preco;
} Produto;
int main() {
// Aloca dinamicamente um vetor de N produtos
Produto *produtos = (Produto *)malloc(N * sizeof(Produto));
if (produtos == NULL) {
printf(“Erro ao alocar memoria para os produtos.\n”);
return 1;
}
// Leitura dos dados
for (int i = 0; i < N; i++) {
    printf("\nProduto %d\n", i + 1);
    printf("Nome (max 30 chars): ");
    scanf("%30s", produtos[i].nome);
    printf("Codigo: ");
    scanf("%d", &produtos[i].codigo);
    printf("Preco (R$): ");
    scanf("%f", &produtos[i].preco);
}

// Exemplo de uso: impressao dos produtos
printf("\nLista de Produtos:\n");
for (int i = 0; i < N; i++) {
    printf("%d: %s, codigo %d, preco R$ %.2f\n",
           i + 1,
           produtos[i].nome,
           produtos[i].codigo,
           produtos[i].preco);
}

// Libera a memoria alocada
free(produtos);
return 0;
}

Exercícios relacionados