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;
}