La stringa ha questo formato: "testo0#testo1#...#testoN-1#. Potrebbe però anche non avere del testo tra un # e un altro. (esempio: "asd#rotfl#lol##qwerty#asd##fine#" ).
Il formato mi ha subito fatto pensare all'uso di strtok, il problema però è che se incontra il "testo nullo" da quanto ho capito strtok va avanti a cercare un prossimo carattere buono per assegnarlo al prossimo token, mentre io avrei bisogno che quel testo vuoto corrisponda ad un puntatore NULL nella cella corrispondente del vettore .
Per farmi capire meglio, se la stringa è "asd##fine# il vettore di stringhe che mi serve è questo:
v[0] = "asd"
v[1] = NULL
v[2] = "fine"
mentre invece strtok mi "taglia" il token contenente il testo nullo, e alla fine ho:
v[0] = "asd"
v[1] = "fine"
Il pezzo di codice incriminato è questo:
Codice: Seleziona tutto
char **array_answer(char *answ, int N) // Funzione che suddivide la stringa answ in un vettore di sottostringhe
{
int i;
char *temp = malloc(strlen(answ)*sizeof(char)); // Alloca memoria per una copia di answ
char *cpy = strcpy(temp, answ); // copia answ nella memoria appena allocata
char *buffer; // variabile per allocare memoria per ogni sottostringa di answ
char **risposte = malloc(N*sizeof(char *)); // vettore di stringhe che conterrà i vari token di answ
char *token = strtok(cpy, "#"); // Comincia a dividere la copia di answ
for (i = 0; token != NULL; i++) { // Iterazione per memorizzare tutti i token nel vettore di stringhe
if (strlen(token) > 0) { // se il token contiene del testo...
buffer = malloc(strlen(token)*sizeof(char)); // alloca memoria per ogni token
risposte[i] = strcpy(buffer, token); // memorizza ogni token nel vettore
}
if (strlen(token) == 0) risposte[i] = NULL;
printf("risposte[%d ] = %s \n", i, risposte[i]); // stampa di prova
token = strtok(NULL, "#"); // continua a dividere la copia di asnw
}
return risposte;
}