ho risolto!!![]()
avevo dimenticato di allocare lo spazio per le stringhe all'interno del vettore (allocavo solo lo spazio per il puntatore).
comunque ho aggiunto questa riga
quindi la funzione completa è questacodice:v[index] = (char*)calloc(strlen(sTemp),sizeof(char));
ho anche aggiunto una funzione per liberare lo spazio usato dal vettore perchè altrimenti rimarrebbe allocato in memoriacodice:char** scompatta(char *buffer,char *delimiters) { char *sTemp; char *sBuffer; int index = 0; char **v; sBuffer = strdup(buffer); //utilizzo la funzione strtok che restituisce la stringa fino al delimitatore sTemp = (char*)strtok(sBuffer,delimiters); v = (char**)malloc(sizeof(char*)); v[index] = (char*)calloc(strlen(sTemp),sizeof(char)); strcpy(v[index],sTemp); index++; //passo a strtok NULL come primo parametro così parsa la stringa che ha in "memoria" while((sTemp = (char*)strtok(NULL,delimiters)) != NULL) { v = (char**)realloc(v,(index+1)*sizeof(char*)); v[index] = (char*)calloc(strlen(sTemp),sizeof(char)); strcpy(v[index],sTemp); index++; } v = (char**)realloc(v,(index+1)*sizeof(char*)); v[index] = NULL; free(sBuffer); return v; }
questa funzione deve essere richiamata quando il vettore non serve più (e prima della fine del programmacodice:void freeVett(char** v) { int k; for(k=0;v[k]!=NULL;k++) free(v[k]); free(v); })

)
Rispondi quotando