PDA

View Full Version : [C] ho un bug che non riesco a trovare. penso dovuto a strtok


ndakota
11-09-2011, 15:18
Ciao a tutti, sono disperato. Ho sto progetto per l'università da portare avanti ma ho un bug che non riesco a risolvere :help:

Dunque, il problema è in questa funzione


Publication get_publication(char* command)
{
char* parameters, *authorsStr, *idsStr;
Publication p = malloc(sizeof(Publication));
List authors = NULL, ids = NULL;

if(p == NULL)
{
printf("Allocation error\n");
exit(-1);
}

command += 2;

parameters = strtok(command, "|");
p->position = position_from_str_to_int(trim(parameters));
parameters = strtok(NULL, "|");
p->id = trim(parameters);
parameters = strtok(NULL, "|");
p->title = trim(parameters);

authorsStr = strtok(NULL, "|");
idsStr = strtok(NULL, "|");
printf("%s\n", authorsStr);
printf("%s\n", idsStr);
authorsStr = strtok(authorsStr, "&");

while(authorsStr != NULL)
{
authors = add_to_list(authors, trim(authorsStr));
authorsStr = strtok(NULL, "&");
}

p->authors = authors;

idsStr = strtok(idsStr, "&");

while(idsStr != NULL)
{
ids = add_to_list(ids, trim(idsStr));
idsStr = strtok(NULL, "&");
}

p->bibliography = ids;

printf("%s\n", p->authors->value);
printf("%s\n", p->authors->next->value);
printf("%s\n", p->bibliography->value);
printf("%s\n", p->bibliography->next->value);

return p;
}


La funzione effettua il parsing di un comando e valorizza i campi di una struct che poi restituisce. Ora, alla fine della funzione effettuo quattro stampe e la seconda è sempre sbagliata. Probabilmente una stringa valorizzata a caso.

Il comando che leggo è di questo tipo


A RI | 1 | the paper | Mario Rossi & Zazza | Giaco mino & Pluto


La parte in questione riguarda le ultime due stringhe all'interno dei |. Praticamente con quelle due stringhe valorizzo due liste dinamicamente con i nomi separati da &. Quello che dovrei ottenere è questo


Zazza
Mario Rossi
Pluto
Giaco mino


Quello che ottengo invece è questo


Zazza
QPQ�
Pluto
Giaco mino


Ringrazio chiunque provi ad aiutarmi. Non so più che prove fare.