Anomalia all'exe di un programma di C con gcc.(linux centOS)

di il
16 risposte

Anomalia all'exe di un programma di C con gcc.(linux centOS)

Buongiorno a tutti ho provato a compilare il seguente programma sia con xubuntu che con linux centOS:
/*Aggiunge dati in un file,salva i dati, legge i dati da file, cerca dati in un file */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STR 32
#define FILENAME "test.dat"
struct bib{
       char title[MAX_STR];
       char author[MAX_STR];
       char coll[MAX_STR];
       
       struct bib *next;
       };
       typedef struct bib bib;
       typedef struct bib *bib_p;
       
       bib_p Add_to_list(bib_p begin,char title[],char auth[],char coll[]);
       bib_p Add_in_order(bib_p head,char title[],char auth[],char coll[]);
       bib_p delete_record(bib_p head, char key[]);
       void print_list(bib_p p);
       int Save_to_file(bib_p begin,char file_name[]);
       int mygetline(char buffer_line[],int);
       int Search_in_list(bib_p head,char trial[]);
       bib_p Read_from_file(bib_p begin,char file_name[]);
       
       int main()
       {
             char buffer_title[MAX_STR];
             char buffer_name[MAX_STR];
             char buffer_coll[MAX_STR];
             char line[MAX_STR];
             int cont;
             char trial[MAX_STR];
             int scelta_2;
             
             
             bib_p head=NULL;
             
             printf("Inserimento dati. . .\n\n");
             head=Read_from_file(head,FILENAME);
             
             
             if(head!=NULL)
             {
                           printf("\nEcco i dati dal file %s:\n\n",FILENAME);
                           print_list(head);
                           }
             
                           
             while(cont)
             {
                        printf("\nInserire il titolo dell'opera:\n");
                        mygetline(buffer_title,MAX_STR);
                        if(strcmp(buffer_title,"exit")==0)
                        break;
                        printf("Inserire l'autore:\n");
                        mygetline(buffer_name,MAX_STR);
                        if(strcmp(buffer_name,"exit")==0)
                        break;
                        printf("Inserire la collocazione dell'opera:\n");
                        mygetline(buffer_coll,MAX_STR);
                        if(strcmp(buffer_coll,"exit")==0)
                        break;
                        
                        printf("\n\nPer terminare digitare exit. . .\n\n");
                        if(strcmp(buffer_title,"")!=0&&strcmp(buffer_name,"")!=0&&strcmp(buffer_coll,"")!=0)
                        //head=Add_to_list(head,buffer_title,buffer_name,buffer_coll);
                        head=Add_in_order(head,buffer_title,buffer_name,buffer_coll);
                        print_list(head);
                        }
                        
                        
                        
                        printf("\n\nInserire dati per la ricerca: ");
                        scanf("%s",trial);
                          
                        Search_in_list(head,trial);
                        
                        
                        printf("\nVuoi eliminare il record? 1=si,0=no");
                        scanf("%d",&scelta_2);
                        if(scelta_2==0){
                        printf("\n\nil record e'stato trovato ma non verra' eliminato\n\n");
        print_list(head);}
        else {
        printf("\n Cancello il record trovato:\n\n");
                        
                        head = delete_record(head, trial);
                        print_list(head);}
                        
                        Save_to_file(head,FILENAME);
                        printf("Indice: \n\n");
                        print_list(head);
                        system("pause");
                        return 0;
                        }
                        
bib_p Add_to_list(bib_p begin,char title[],char auth[],char coll[])
{
      bib_p p;
      bib_p curr;
      
      p=(bib*)malloc(sizeof(bib));
      strcpy(p->title,title);
      strcpy(p->author,auth);
      strcpy(p->coll,coll);
      
      p->next=NULL;
      
      if(begin==NULL)
      return p;
      
      else
      {
          curr=begin;
          while(curr->next!=NULL)
          curr=curr->next;
          curr->next=p;
          return begin;
          }
          }
          
int Save_to_file(bib_p begin,char file_name[])
{
    bib_p p;
    FILE *fp;
    
    printf("Salvataggio. . .\n\n");
    
    fp=fopen(file_name,"w");
    if(fp==NULL)
    {
                printf("Impossibile aprire in scrittura il file %s. . .\n\n",file_name);
                return -1;
                }
                
                p=begin;
                while(p!=NULL)
                {
                              fwrite(p,sizeof(bib),1,fp);
                              p=p->next;
                              }
                              return 0;
                              }
                              
bib_p Read_from_file(bib_p begin,char file_name[])
{
      
      bib_p start;
      bib bib_item;
      FILE *fp;
      int n;
      
      start=begin;
      
      fp=fopen(file_name,"r");
      
      if(fp==NULL)
      {
                  printf("Impossibile aprire il file %s in lettura. . .\n\n",file_name);
                  printf("Nessun archivio importato!!\n\n");
                  return begin;
                  }
                  
                  start=begin;
                  n=1;
                  while(n>0)
                  
                  {
                            n=fread(&bib_item,sizeof(bib),n,fp);
                            printf("%d)  %4s  %4s  %4s  \1",n,bib_item.title,bib_item.author,bib_item.coll);
                            if(n>0)
                            start=Add_to_list(start,bib_item.title,bib_item.author,bib_item.coll);
                            }
                            return start;
                            }
                            
void print_list(bib_p p)
{
     if(p!=NULL)
     {
                printf("\n%4s  %4s  %4s  \n\n",p->title,p->author,p->coll);
                p=p->next;
                print_list(p);
                }
                }
                
int Search_in_list(bib_p head,char trial[])
{
    printf("\n\nRicerca elementi in lista...\n");
    if(head==NULL)
    {
                  printf("\nImpossibile individuare il percorso specificato\n");
                  return -1;
                  }
                  
    while(head!=NULL)
    {
                     if(strcmp(head->title,trial)==0||strcmp(head->author,trial)==0||strcmp(head->coll,trial)==0)
                     {
                                                                                                                 printf("\n\nElemento trovato!!\n");
                                                                                                                 return 1;
                                                                                                                 }
                     else
                     printf("Elemento non trovato!!\n\n");
                     
                     head=head->next;
                     
                     }
                     
                     
                     return 0;
                     }
                                                                                                                                               
                
void insert(bib_p a,bib_p b,bib_p q)
{
     if(a->next!=b)
     {
                   printf("Errore nella lista\n\n");
                   return;
                   }
                   a->next=q;
                   q->next=b;
                   }
                   
bib_p Add_in_order(bib_p head,char title[],char auth[],char coll[])
{
      bib_p p;
      bib_p temp;
      bib_p temp_pre;
      
      p=(bib_p)malloc(sizeof(bib));
      strcpy(p->title,title);
      strcpy(p->author,auth);
      strcpy(p->coll,coll);
      
      p->next=NULL;
      
      if(head==NULL)
      return p;
      
      else
      {
          if(strcmp(title,head->title)<0)
          {
          p->next=head;
          return p;
          }
          
          temp=head;
          temp_pre=head;
          
          while(temp!=NULL)
          {
                           if(strcmp(title,temp->title)<0)
                           {
                           insert(temp_pre,temp_pre->next,p);
                           return head;
                           }
                           temp_pre=temp;
                           temp=temp->next;
                           }
                           insert(temp_pre,temp_pre->next,p);
                           return head;
                           }
                           }
                           
int mygetline(char buffer_line[],int Max_l)
{
    int c,i;
    i=0;
    while((c=getchar())!='\n'&&i<Max_l)
    buffer_line[i++]=c;
    buffer_line[i]='\0';
    return i;
}
                           
                      bib_p delete_record(bib_p head, char key[])
{
    bib*temp, *prev, *t;
    int found =0;
    if(head==NULL)
        return head;
    
    
    if(strcmp(head->title,key)==0)
    {
        temp=head;
        head=head->next;
        free(temp);
        return(head);
    }
    
    temp=head->next;
    prev= head;
    
    while(temp!= NULL && found ==0)
    {
        if( strcmp(temp->title,key)==0)
        {
            found =1;
        }
        else
        {
            prev= temp;
            temp=temp->next;
        }
    }
    
    if(found!=0)
    {
        //il record è presente
        prev->next = temp->next;
        free(temp);
        
    }
    
    return head;
    
}     




Cio che ho notato di strano è che con xubuntu funziona correttamente , mentre con centOS no in quanto, una volta lanciato , procede cosi

[docente@PC01 Documenti]$ cd /home/docente/Scrivania
[docente@PC01 Scrivania]$ gcc lista.c
[docente@PC01 Scrivania]$ cd/home
bash: cd/home: No such file or directory
[docente@PC01 Scrivania]$ cd /home/docente/Scrivania
[docente@PC01 Scrivania]$ gcc lista.c -o lista -lm
[docente@PC01 Scrivania]$ ./lista
Inserimento dati. . .

Impossibile aprire il file test.dat in lettura. . .

Nessun archivio importato!!

Vuoi effettuare una ricerca?
Quindi mi salta la fase di inserimento dati , sapreste dirmi perche?

16 Risposte

Devi accedere o registrarti per scrivere nel forum
16 risposte