Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18

    [C]aiuto memcpy,strncpy ecc ecc

    spero qualcuno possa aiutarmi.
    ho due buffer[100], vorrei copiare n byte dal buffer1 a partire dal 10 byte nel buffer2 a partire dal 10 byte.
    ho provato con memcpy ma non riesco a copiarli nella destinazione voluta...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Originariamente inviato da rschirin
    ho provato con memcpy ma non riesco a copiarli nella destinazione voluta...
    Posta il codice che hai scritto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18
    posto sia la struttura con cui lavora la mia funzione,sia il codice della funzione stessa.
    check201 viene chiamata all'interno di una funzione che subito prima aveva fatto una recv. plen è il numero di byte ricevuti dalla recv appunto.
    codice:
    struct ResponseGet{
    	char buf[MAXLENREQ];
    	//int LenRange;
    	int expire;
    	char dati[MAXLENREQ];
    	struct Range range;	
    	};
    
    static int check201(struct ResponseGet *pris, int *plen){
    	
    	printf("\n sono nella check201\n");
    	printf("plen vale:%d\n",*plen);
    	if(*plen<1) return(0); /* leggere ancora perchè SIMULO ERRORE */
    	if(*plen>=1) 
    		if(pris->buf[0]!='2') 
    			return(-1);
    	if(*plen>=2)
    		if(pris->buf[1]!='0')
    			return(-1);
    	if(*plen>=3) 
    		if(pris->buf[2]!='1')
    			return(-1);
    	
    	if(*plen>=4)
    		if(pris->buf[3]!='\n')
    			return(-1);
    	if(*plen>=5) 
    		if(pris->buf[4]!='R')
    			return(-1);
    	if(*plen>=6) 
    		if(pris->buf[5]!='a')
    			return(-1);
    	if(*plen>=7)
    		if(pris->buf[6]!='n')
    			return(-1);
    	if(*plen>=8)
    		if(pris->buf[7]!='g')
    			return(-1);
    	if(*plen>=9)
    		if(pris->buf[8]!='e')
    			return(-1);
    	if(*plen>=10)
    		if(pris->buf[9]!=' ')
    			return(-1);
    	
    	if(*plen>=11) {
    		int ris, len2, len3, len4, valuerange;
    		char str[1024];
    		
    		ris=sscanf(pris->buf+10, "%i", &len2);/*	cerco il valore di inizio del range	*/
    		if(ris!=1)	return(-1); /* errato, ci sono caratteri ma non e' numero */
    		if( len2<0 ) return(-1); /* errato, len negativo */
    		pris->range.first=len2;/*	metto il valore di inizio del range	*/
    		valuerange=len2;
    		sprintf(str, "%i", len2);
    		len2=11+strlen(str);
    		if(*plen>=len2){
    			if(pris->buf[len2-1]!='-')
    				return(-1);
    			}
    		ris=sscanf(pris->buf+len2+1-1, "%i", &len3);/*	cerco il valore di fine del range	*/
    		if(ris!=1)	return(-1); /* errato, ci sono caratteri ma non e' numero */
    		if( len3<0 ) return(-1); /* errato, len negativo */
    		pris->range.last=len3;/*	metto il valore di fine del range	*/
    		
    		valuerange=(pris->range.last-pris->range.first)+1;/*	+1 perchè estremi compresi	*/
    		sprintf(str, "%i", len3);
    		len3=len2+strlen(str)+1;
    		printf("valuerange è :%d\n",valuerange);
    		printf("il range first è:%d\n",pris->range.first);
    		printf("il range last è:%d\n",pris->range.last);
    		printf("quel valore è%s\n",pris->buf+len3+1-1);
    		if(*plen>=len3){
    			if(pris->buf[len3-1]!='\n')
    				return(-1);
    			}
    		
    		/* cerco se c'e' Expire xxxx\n  */
    		if(*plen>=len3+1)
    			if(pris->buf[len3+1-1]!='E')
    				return(-1);		
    		if(*plen>=len3+2)
    			if(pris->buf[len3+2-1]!='x')
    				return(-1);		
    		if(*plen>=len3+3)
    			if(pris->buf[len3+3-1]!='p')
    				return(-1);		
    		if(*plen>=len3+4)
    			if(pris->buf[len3+4-1]!='i')
    				return(-1);		
    		if(*plen>=len3+5)
    			if(pris->buf[len3+5-1]!='r')
    				return(-1);		
    		if(*plen>=len3+6)
    			if(pris->buf[len3+6-1]!='e')
    				return(-1);		
    		if(*plen>=len3+7)
    			if(pris->buf[len3+7-1]!=' ')
    				return(-1);
    		if(*plen<len3+7+1)
    			return(0);
    		
    		ris=sscanf(pris->buf+len3+7, "%i", &len4);
    		if(ris!=1)	return(-1); /* errato, ci sono caratteri ma non e' numero */
    		if(len4<0) return(-1); /* errato, len negativo */
    		pris->expire=len4;
    		
    		sprintf(str,"%i", len4);
    		/* cerco il carattere successivo alla fine del numero trovato */
    		len3= len3 + 8 + strlen(str);
    		/* controllo se c'e' l' EOL */
    		if(*plen>=len3)
    			if(pris->buf[len3-1]!='\n')
    				return(-1);	
    		/* cerco la fine del messaggio */
    		if(*plen>=(len3+1))
    			if(pris->buf[len3+1-1]!='\n')
    				return(-1);
    		
    		/*	vedo se il n di bytes ricevuti è minore di quello che mi aspettavo in totale	*/
    		if(*plen<(len3+1+valuerange))
    			return(0);
    		printf("printf di prova\n");
    		/* copio nel buffer destinazione i dati allegati nel messaggio 200 */
    		
    		memcpy(  & (buffer[pris->range.first-1])  , pris->buf+len3+1 , valuerange  );
    		
    		printf("il buffer riempito è:%s\n",buffer[pris->range.first]);
    		
    		}
    	return(1);	
    	
    	}
    in pratica memcpy si blocca lì, visto che la printf subito prima viene eseguita mentre quella dopo no.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì, ma una cosa è rispondere alla tua prima domanda

    ho due buffer[100], vorrei copiare n byte dal buffer1 a partire dal 10 byte nel buffer2 a partire dal 10 byte
    un'altra cosa capire il problema del tuo codice, con tutto quello che è necessario sapere/esaminare

    memcpy( & (buffer[pris->range.first-1]) , pris->buf+len3+1 , valuerange );
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18
    ecco perchè avevo semplificato il problema....
    non credo che con il codice mio si possa capire qualcosa; ritorno al primo post!

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da rschirin
    non credo che con il codice mio si possa capire qualcosa; ritorno al primo post!
    Chiaramente, devi postare la parte di codice significativa, oppure produrre un esempio per far capire: il codice serve a questo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da rschirin
    ecco perchè avevo semplificato il problema....
    non credo che con il codice mio si possa capire qualcosa; ritorno al primo post!
    memcpy( buf2+10, buf1+10, n );
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.