Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Warning nella fopen mi blocca l'esecuzione.

    Ragazzi sto impazzendo,ho un problema con un esercizio di Reti,il codice è il seguente


    codice:
    sscanf(buff,"%s %s" ,nomefile,nome); 				
    if((nomefile==0) && (nome==0))fputs("Errore sscanf",stdout); 				fd1=fopen(nomefile,"r"); 				
    if(fd1==NULL)fputs("Errore apertura file",stdout); 				
    for(; ;){ 
    riga=fgets(righe,MAXLINE,fd1); 
    sscanf(buff,"%s %d",stringa,&numero); 					
    if(riga==NULL)break; 					
    if(nome==stringa){ 								
    sprintf(num,"%d", numero); 								
    break; 					
    } 				
    } 				
    fclose(fd1);
    Mi da un warning nella fopen ,come se il risultato della sscanf non fosse il file che gl'ho passato in buff:
    warning: passing argument 1 of ‘fopen’ makes pointer from integer without a cast

    Mi dite dov'è che sbaglio???
    Grazie.

  2. #2
    rimando il codice:
    codice:
    sscanf(buff,"%s %s" ,nomefile,nome); 
    				 
    if((nomefile==0) && (nome==0))fputs("Errore sscanf",stdout); 				fd1=fopen(nomefile,"r"); 				 
    if(fd1==NULL)fputs("Errore apertura file",stdout); 				 
    for(; ;){  
    riga=fgets(righe,MAXLINE,fd1);  
    sscanf(buff,"%s %d",stringa,&numero); 					 
    if(riga==NULL)break; 					 
    if(nome==stringa){ 								 
    sprintf(num,"%d", numero); 								
     break; 					 
    } 				 
    } 				 
    fclose(fd1);

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ci mostri come hai dichiarato la variabile

    nomefile


    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4

    Re: [C] Warning nella fopen mi blocca l'esecuzione.

    ma dove la chiami la fopen?

    ah.. la in alto a destra...
    ;-)

  5. #5
    char nomefile;
    così l'ho dichiarata
    ora vi posto tutto il codice:
    codice:
    /* server iterativo dell'applicazione echo che utilizza la select */
    
    #include	"basic.h"
    #include	"my_signal.h"
    
    int
    main(int argc, char **argv)
    {
       FILE			*fd1;
       int			listend, connd, sockd;
       int			i, maxi, maxd,numero;
       int			ready, client[FD_SETSIZE];
       char			buff[MAXLINE],num[MAXLINE], nomefile, nome ,stringa, righe[MAXLINE],*riga;
       fd_set		rset, allset;
       ssize_t		n;
       struct sockaddr_in	servaddr, cliaddr;
       socklen_t		cliaddr_len;
    
       if( (listend = socket(AF_INET, SOCK_STREAM, 0)) < 0)
            err_sys("errore in socket");
    
       bzero(&servaddr, sizeof(servaddr));
       servaddr.sin_family      = AF_INET;
       servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
       servaddr.sin_port        = htons(SERV_PORT);	
    
       if( (bind(listend, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0)
           err_sys("errore nella bind");
    
       if( listen(listend, LISTENQ) < 0 )
           err_sys("errore nella listen");
    
       maxd = listend;   /* inzializza il numero di descrittori */
       maxi = -1;
       for ( i = 0; i < FD_SETSIZE; i++)
           client[i] = -1; /* inizializza l'array client a -1 */
    
       FD_ZERO(&allset);   /* inizializza a zero tutti i descrittori */
       FD_SET(listend, &allset); /* setta il descrittore di ascolto */
    
       for ( ; ; ) {
    
           rset = allset;  
    	/* setta l'insieme di descrittori da controllare in lettura */
    
           if( (ready = select(maxd+1, &rset, NULL, NULL, NULL)) < 0 )
    	   err_sys("errore nella select");
    
           if( FD_ISSET(listend, &rset) ) {
    	  /* se è arrivata una richiesta di connessione al socket di ascolto 
                 viene invocata la accept e creato un socket di connessione */
    
    	    cliaddr_len = sizeof(cliaddr);
    	    if( (connd = accept(listend, (struct sockaddr *) &cliaddr, &cliaddr_len)) < 0) 
    	        err_sys("errore nella accept");
    
    	    for(i = 0; i < FD_SETSIZE; i++)
    	        if( client[i] < 0 ) {
    		/* scrive il descrittore del nuovo socket nel primo posto 
                       libero di client */
    
    		   client[i] = connd;
    		   break;
    	        }
    	    if( i == FD_SETSIZE ) /* non ci sono posti liberi in client */
    	        err_quit("troppi client");
    	    FD_SET(connd, &allset); 
                 /* altrimenti inserisce connd tra i descrittori da controllare */
    
    	    if( connd > maxd )
    	        maxd = connd;
    	    if( i > maxi )
    	        maxi = i;
    	    if( --ready <= 0 ) /* cicla fino a quando ci sono ancora descrittori
                                      leggibili da controllare */
    	        continue;
            }
    
    	for( i = 0; i <= maxi; i++ ) {
             /* controlla tutti i socket attivi per controllare se sono leggibili */
    
    	     if( (sockd = client[i]) < 0 ) 
                   /* se il descrittore non è stato selezionato viene saltato */
    
    		 continue;
    
    	     if ( FD_ISSET(sockd, &rset) ) {
    		/* se sockd è leggibile invoca la readline */
    
    	        if ( (n = readline(sockd, buff, MAXLINE)) == 0) {
    		   /* se la connessione è stata chiusa dal client chiude il
                          descritore di connessione */
    
    	            if( close(sockd) == -1 )
    		        err_sys("errore nella close");
    	            FD_CLR(sockd, &allset); 
    		     /* rimuove sockd dalla lista dei socket da controllare */
    
    	            client[i] = -1; /* cancella sockd da client */
    	        }
    	        else{
    			sscanf(buff,"%s %s" ,nomefile,nome);
    				if((nomefile==0) && (nome==0))fputs("Errore sscanf",stdout);
    				fd1=fopen(nomefile,"r");
    				if(fd1==NULL)fputs("Errore apertura file",stdout);
    				for(; ;){
    					riga=fgets(righe,MAXLINE,fd1);
    					sscanf(buff,"%s %d",stringa,&numero);
    					if(riga==NULL)break;
    					if(nome==stringa){
    								sprintf(num,"%d", numero);
    								break;
    					}
    				}
    				fclose(fd1);
    
    
    
    
                        if( writen(sockd,  num, strlen(num)) != strlen(num) )
    			 err_sys("errore nella write");
    		}
    	        if ( --ready <= 0 )
    		    break;
    	    }
           }
       }
    
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Beh ... hai dichiarato

    nomefile

    come singolo char ... e invece deve essere un array di char (una stringa per il C).

    P.S. Ce ne hai messo di tempo per rispondere ... non ricordavo piu' il problema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.