Re: fwd: info liste
[email protected] Tue, 8 Mar 2005 09:56:17 +0100
| Newsgroups | gmane.comp.security.italian.devel |
|---|---|
| Message-ID | <[email protected]> |
--===============0992749026== Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Mar 07, 2005 at 03:19:42PM +0100, [email protected] wrote: Riporto solo parte del codice: > void inserisci_libro (void) { > char titolo[8000]; > > ptr_lista_libri new_libro, prec_libro, curr_libro; // tre nuovi puntatori lista > > fflush(stdin); > printf("Inserisci il nome del libro: "); > scanf("%s",titolo); > > new_libro = (ptr_lista_libri) malloc (sizeof(lista_libri)); > if (new_libro != NULL) { // creo il nuovo elemento della lista new_libro->titolo = malloc(strlen(titolo)); strcpy(new_libro->titolo, titolo); /* La riga seguente non serve */ > new_libro->titolo = titolo; > new_libro->next = NULL; > > Il problema e' che se vado a stampare la lista (in particolare il titolo) mi succede la seguente cosa, visualizza un numero corretto di elementi (ovvero se ho inserito 3 elementi ho tre visualizzazioni), ma il titolo che mi visualizza e' sempre l'ultimo che ho inserito (quindi se ho inserito i titoli A,B e C, mi visualizza per 3 volte C). > > Qualcuno puo' risolvere questo mio irritante problema??? Non vorrei dire stupidaggini, ma se vuoi che la lista contenga i titoli devi in qualche modo allocare spazio e copiare i titoli nella struttura dati. Un semplice "new_libro->titolo = titolo;" fa in modo che new_libro->titolo punti alla variabile titolo della funzione inserisci_libro. Solo che a questa variabile viene riservato spazio sullo stack ogni volta che viene chiamata la funzione. Se chiami la funzione tre volte di seguito, la variabile titolo, con ogni probabilita' stara' sempre allo stesso indirizzo sullo stack, ma e' meglio non contarci troppo. Per copiare veramente i titoli e' necessario allocare spazio nella struttura dati e usare una strcpy (o strncpy o altro). HTH, Nicola. -- Real programmers don't bring brown bag lunches to work. If the vending machine sells it, they eat it. If the vending machine doesn't sell it, they don't eat it. Vending machines don't sell quiche --===============0992749026== Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline ________________________________________________________ http://www.sikurezza.org - Italian Security Mailing List --===============0992749026==--