In rosso le correzioni

codice:
#include <stdio.h>
// #include<malloc.h>  // inutile

struct automobile
{
       char marca[20];
       char modello[20];
       int vendute;  // l'intero è uno solo, non 20
       };  // la a non serve 

int i;  // *p non viene usato 

struct automobile dettagli[30];  // nel ciclo ne usi 30 
char risp;
       
int main() // va inserito sempre 
{
      for(i=0;i<30;i++)
      {
             printf("Vuoi inserire elementi nella lista? (s/n): ");
             scanf("%c",&risp);
             // getchar();  // inutile 
             if(risp=='s' || risp=='S')
             {
                     printf("\nDettagli automobile: \n\n");
                     printf("Marca : ");
                     scanf("%s",dettagli[i].marca);  // si indica la stringa 
                     printf("Modello: ");
                     scanf("%s",dettagli[i].modello);  // si indica la stringa 
                     printf("Unita' vendute: ");
                     scanf("%d",&dettagli[i].vendute);  // non esiste un array
             }
             else break;  // altrimenti non esce per No 

             while(getchar()!='\n') ;  // per evitare i problemi dell'input
       }
                         
      system("PAUSE");
      return 0;  // da inserire 
}