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.
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.