Enviado em 05/03/2017 - 16:40h
Olá a todos, necessito fazer o seguinte programa:// Declarando bibliotecas auxiliares: #include <stdio.h> #include <stdlib.h> #include <string.h> // Estrutura do carro: typedef struct { char marca[20]; char cor[20]; int ano; float price; } CARROS; CARROS *vet_carros; // Declarando "vet_carros" como variável global. // Declarando funções auxiliares: void alocaVetor (int quant, CARROS *vet_carros); void lerCarros (int quant, CARROS *vet_carros); // Início: int main (void) { int quant; // Variável que irá armazenar o tamanho do vetor. printf ("Defina a quantidade de carros a serem lidos: "); scanf ("%d", &quant); alocaVetor (quant, vet_carros); lerCarros (quant, vet_carros); return 0; } // Função responsável por alocar o vetor de carros: void alocaVetor (int quant, CARROS *vet_carros) { vet_carros = (CARROS *) malloc (quant * sizeof (CARROS)); if (vet_carros == NULL) { printf ("\aERRO DE MEMORIA!!!"); exit (-1); } } // Função responsável por solicitar as entradas ao usuário e as ler: void lerCarros (int quant, CARROS *vet_carros) { printf ("\nEntre com a marca: "); setbuf(stdin, NULL); fgets (vet_carros -> marca, 20, stdin); printf ("Entre com a cor: "); setbuf(stdin, NULL); fgets (vet_carros -> cor, 20, stdin); printf ("Entre com o ano: "); scanf ("%d", &vet_carros -> ano); printf ("Entre com o preco: "); scanf ("%f", &vet_carros -> price); }
Enviado em 05/03/2017 - 19:30h
Observe as funções alocaVetor e lerCarros. Ambas recebem um ponteiro do tipo CARROS, até aí tudo bem.alocaVetor (quant, vet_carros);
vet_carros = (CARROS *) malloc (quant * sizeof (CARROS));
printf("%p\n", &vet_carros);
void alocaVetor (int quant, CARROS **vet_carros) { *vet_carros = malloc(...); } int main () { alocaVetor(quant, &vet_carros); ... }
Enviado em 06/03/2017 - 12:42h
A explicação do UilianRies está correta e a sugestão dele funciona. Mesmo assim, eu gostaria de fazer uma sugestão ligeiramente diferente.CARROS *alocaVetor(size_t quant){ return malloc(quant*sizeof(CARROS)); }
if(!(vet_carros=alocaVetor(quant))){ fprintf(stderr, "Erro de alocação de memória: %s.\n", strerror(errno)); return 1; }
Enviado em 06/03/2017 - 21:50h
Obrigado pessoal, a dica de vocês foram de grande valor. Mais explicado que isso, impossível, irei seguir o algoritmo.Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Descritores de Arquivos e Swappiness
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Magic SysRq key - O botão de pânico no kernel do seu Linux
Erro na atualização dos apps na barra de tarefas (15)
Chamadas de variável de uma página para outra no PHP8 (4)
Albfneto. Voltando devagar. (7)
HD externo não mostra arquivos (6)
Equipamentos não ligam com a fonte original - NetMetal5 - OmnTik5 (2)