Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219

    [C] Concatenare Stringhe

    Qual è il modo più performante per gestire e concatenare stringhe in C?

  2. #2
    strcat
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  3. #3
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    Ma se faccio una concatenazione in un ciclo di 1000000 mi risulta più lento della cancatenazione con VB6!
    Mi serve qualcosa di più veloce..

  4. #4
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    La funzione che ho fatto per concatenare sarebbe questa:

    codice:
    char * buf(char * buffer, long * lngBuffer, char *  addString){
        char * strHold = buffer;
        long lngIndex = 0;
        long addStrLen = strlen(addString);
        long buffStrLen = strlen(buffer);
        long newSize;
    
    	//Controloo che non mi serva un buff più grande
        if (buffStrLen + addStrLen > *lngBuffer ){
    
    		//Calcolo la dimensione del nuovo buff
            for(lngIndex=0; (*lngBuffer + (65536 * lngIndex)) < (buffStrLen + addStrLen);lngIndex ++);
            newSize = *lngBuffer + (65536 * lngIndex);
    
    		//Alloco il nuovo spazio
            buffer = malloc(newSize);
    
            //Metto il terminatore di stringa
    		memset(buffer + buffStrLen + addStrLen + 1, 0, 1);
    
    		//Copio il vecchio contenuto
    		strcpy(buffer,strHold);
    
    		//Aggiorno la dimensione del buffer
        	*lngBuffer = newSize;
        }
    
    	//Aggiungo la nuova stringa:
    	//COSI'
        for(lngIndex=0; lngIndex<addStrLen + 1; lngIndex++)	*(buffer + buffStrLen + lngIndex) = *(addString + lngIndex);
    	//OPPURE COSI'
        //memcpy(buffer + buffStrLen, addString, addStrLen);
    	//OPPURE COSI'
        //strcpy(buffer + buffStrLen, addString);
    
    	//Se avevo allargato il buff libero lo spazio vecchio
        if (strHold!=buffer) free(strHold);
    
        return buffer;
    }

  5. #5
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    E si usa così:

    codice:
    char * temp;
    long dim = DIMENSIONE_BLOCCO_CONCATENAZIONE;
    
    //Per Inizializzarla
    temp = malloc(DIMENSIONE_BLOCCO_CONCATENAZIONE);
    //Metto tutto a 0 per avere già il terminatore
    memset(temp, 0, DIMENSIONE_BLOCCO_CONCATENAZIONE);
    	
    
    //Per Concatenare
    temp = buf(temp, &dim, "Ciao");
    
    printf("%s\n", temp);
    
    //Per cancellarla
    free(temp);

  6. #6
    ti consiglierei anch'io di usare la strcat...
    cmq mi sa che tutte quelle malloc e memset non fanno molto bene
    www.vape04.too.it - informatica, elettronica e tante altre cose.
    @LFEO§OFT GREEnOS

  7. #7
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    ma con strcat non avrei la stringa dinamica!

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.