salve,
so che il titolo è un pò misterioso e la strtok() e eval() non hanno niente in comune, ma sono i problemi principali del mio programma.
[list=1][*]strtok()
ho scritto una funzione che presi in imput una stringa e i delimitatori scompatta la stringa data in un vettore di stringhe e ne ritorna il puntatore.
il problema è che dopo averla eseguita correttamente il programma crasha.codice:char** scompatta(char *buffer,char *delimiters) { char *sTemp; int index = 0; char **v; //utilizzo la funzione strtok che restituisce la stringa fino al delimitatore sTemp = (char*)strtok(buffer,delimiters); v = (char**)malloc(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*)); strcpy(v[index],sTemp); index++; } return v; }
il main è il seguente
la stampa viene fatta correttamente ma dopo crasha...sapete spiegarmi il perchè?codice:int main(void) { char **v; char str[] = "dim=2"; v = scompatta(str,"="); printf("\n'%s' = '%s'",v[0],v[1]); return 0; }
[*]eval()
stavo cercando una funzione tipo eval() di PHP che dovrebbe valutare una stringa ed eseguirla come se fosse codice. questo mi risparmierebbe il processo di scompattamento della stringa in quanto le stringhe da me utilizzate fanno riferimento ad assegnamenti a variabili.
se esistesse qualcosa di simile sarebbe molto comodo(oppure qualche dritta sull'implementazione)[/list=1]codice:char str[] = "dim=2"; int dim; eval(str); printf("dim = %d",dim);

Rispondi quotando