Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348

    [C] Errore in compilazione con i puntatori

    Ciao a tutti!

    Mi e' venuto un piccolo dubbio con i puntatori in seguito ad un errore in compilazione che e' il seguente:

    invalid operands to binary +

    parola += (byte * sizeof(char));

    codice:
          char parola [MAXVALUE] 
    
    	value=MAXVALUE;
    	while(value > 0 ){
    		//printf("%d \n" , size);	
    		//printf("value:%d\n" , value);
    		if((byte=read(tcp_sk , parola , MAXVALUE-1)) < 0 ){
    			if(errno == EINTR){
    				continue;
    			}else{
    				return -1;
    			}
    			
    		}else{
    			if( byte == 0){
    				//printf("qua\n");
    				break ;
    			}
    		}
    		/*Rga in cui compare l'errore in compilazione*/
                   parola += (byte * sizeof(char));
    		
                   value 	  -= 	byte;
    		size 	  += 	byte ;
    		
    	}
    Il mio dubbio e' che se prendo il codice e creo una funzione non mi compare piu' l'errore!
    Pero' parola += (byte * sizeof(char)) dovrebbe essere consentita nell'algebra dei puntatori (o forse ho detto una stronz****)

    codice:
    int read_msg(int sd ,char * msg){
    
    	int value , byte;
    	int size=0;
    	value=MAXVALUE;
    
    	while(value > 0 ){
    		printf("%d \n" , size);	
    		//printf("value:%d\n" , value);
    		if((byte=read(sd , msg , MAXVALUE-1)) < 0 ){
    			if(errno == EINTR){
    				continue;
    			}else{
    				return -1;
    			}
    			
    		}else{
    			if( byte == 0){
    				//printf("qua\n");
    				break ;
    			}
    		}
    		msg += (byte * sizeof(char));
    		value 	  -= 	byte;
    		size 	  += 	byte ;
    		
    	}
    
    	return size;
    }

    Grazie a tutti ciaoooooooo

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non ti è sorto il dubbio che char parola[MAXVALUE] NON sia un puntatore?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    ma scusa

    char parola[maxvalue] non e' equivalente a dire

    char * parola ;

    parola = malloc(maxvalue);

    p.s.

    scusasatemi per il messaggio doppio nel forum

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    No. Gli array non sono puntatori e questo è un caso emblematico.
    Con char parola[MAXVALUE] dichiari un array immodificabile, con parola = malloc(maxvalue); ottieni l'accesso ad una zona di memoria tramite uno specifico puntatore (in teoria costante pure questo visto che se si fà un parola++ si perde l'indirizzo di allocazione).

    Che poi i vari elementi siano attraversabili attraverso un parola[i] non li rende la stessa cosa.

    Quello che vuoi ottenere si fa in così:
    codice:
    char parola[MAXVALUE];
    char *ptr_parola = parola;
    ptr_parola += (byte * sizeof(char));
    o

    codice:
    char * parola = malloc(MAXVALUE*sizeof(char));
    char *ptr_parola = parola;
    ptr_parola += (byte * sizeof(char));
    free(parola);

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    ok grazie mille! i puntatori sono

  6. #6
    Ma perchè moltiplichi per sizeof(char) ?
    Oltre al fatto che sizeof(char) == 1 ?


  7. #7
    Originariamente inviato da menphisx
    Oltre al fatto che sizeof(char) == 1 ?
    da http://en.wikipedia.org/wiki/Sizeof
    The size of char on most architectures is 1 byte

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 © 2025 vBulletin Solutions, Inc. All rights reserved.