lascio le due domande alla fine del codice e vi ringrazio in anticipo se risponderete punto per punto. Apprezzo di più chi prova a correggere il codice scritto da me spiegandomi gli errori invece di darmi soluzioni alternative.
Sto provando a scrivere del codice in ambiente C/Linux tale che mi permetta di prendere in input da riga di comando una stringa del tipo:
- Codice: Seleziona tutto
htmlget -D2 http://www.google.com/page1/page2.html
che mi separi il dominio da quello che segue creando due stringhe relative al dominio ed alla pagina web da inserire nei campi webdomain e webpage di una lista di 200 elementi di tipo struttura
- Codice: Seleziona tutto
struct list
{
int link_number;
int link_depth;
char *webdomain;
char *webpage;
bool visited;
};
questa struttura è inserita in una libreria personalizzata di nome setup.h
Il codice del main scritto finora è questo:
- Codice: Seleziona tutto
[...]
bool correct_webaddress;
char *domain_name;
char *page_name;
struct list result[200]; //ci sono 200 elementi ma non è uno spreco perché il programma farà altro
[...]
if(correct_webaddress) //se si lancia come indicato prima qui si ha correct_webaddress = true
{
domain_name = web_address_domain(argv[2]);
result[0].webdomain = domain_name; //esaminare correttezza da qui in poi, prima ok
printf("%s\n\n\n", result[0].webdomain);
while(domain_name[i] != '\0') //domain_name[i]
{
printf("%c", domain_name[i]);
i++;
}
}
dove la funzione web_address_domain è una funzione definita in setup.h che fa correttamente il suo lavoro:
- Codice: Seleziona tutto
char* web_address_domain (char *webstring)
{
int w = conta_estensione_dominio(webstring);
char domain_name[w];
char *domain_name_Ptr;
int i = 0; //scansiona webstring alla ricerca dello slash da cui parte la pagina
int j = 0; //conta gli slash
while(j != 1)
{
if(webstring[i] != '/')
{
domain_name[i] = webstring[i];
printf("%c", domain_name[i]);
i++;
}
else
{
domain_name[i] = '\0'; //il null a fine stringa
printf("\n");
j++;
}
}
domain_name_Ptr = domain_name;
/* per fare più velocemente dei printf("%c") [funzionano entrambe]
// puts(domain_name);
// puts(domain_name_Ptr);
*/
return domain_name_Ptr;
}
--
1) lanciando il codice così come indicato ottengo il seguente output:
www.google.com
www.goog�D3
http://www.goog�D3
mentre se commento la riga "printf("%s\n\n\n", result[0].webdomain);" ottengo l'output
www.google.com
www.google.com
come mai l'ultima stampa senza la printf commentata viene sbagliata? la stampa dei caratteri di domain_name[i] non dovrebbe risentire della stampa subito precedente di result[0].webdomain... non ho proprio idea del motivo...
2) è una mia impressione o è come se il campo result[0].webdomain ha uno spazio troppo corto incapace di memorizzare tutta la stringa "www.google.com"? all'inizio sembra ben avviato, poi escono quei simboli che non c'entrano niente... ho definito male qualcosa?