|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
[c] files[a] = *buffer; xké nn va????
if ((f = fopen ("files.txt", "r")) == NULL)
return 0; /* Errore */ while(fgets (buffer, sizeof (buffer), f)!=NULL) { if(( p = strchr(buffer,'\n'))!=NULL) *p='\0'; a++; files[a] = *buffer; printf("%s",files[a]); } pero nn funziona!!! come mai??? nel file files.txt cé scritto: casa lavoro non é la prima volta ke mi imbatto in questo problema: cioé d assegnare all'array una stringa con un puntatore....sicuro é una cagata...ma nn capisco... ![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
In che senso non funziona? quali sono i sintomi che ti portano ad una tale conclusione?
|
![]() |
![]() |
![]() |
#3 |
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
Inoltre avrei bisogno di conoscere le dichiarazioni di
p files buffer potrebbero essere sottintese, lo so...ma magari l'errore è lì... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
char *p, buffer[100],files[100];
il compilatore nn mi da errrori (uso devc) ma qnd avvio il programmino si blocca...e si kiude per errore |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
dichiara p non come puntatore ma come array di char.
In questo modo allochi memoria non solo per il puntatore ma per tutta la stringa
__________________
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
ma dici ke é questo il problema? xké p deve essere un puntatore per poter fare:
if(( p = strchr(buffer,'\n'))!=NULL) *p='\0'; xké se no mi dice ke cl un errore di compatibilità |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
La variabile p deve essere un puntatore e su questo non ci sono dubbi!
Poi comunque non è molto chiaro cosa vuole fare $te. Lui dice che ha dichiarato: char *p, buffer[100],files[100]; Sui primi 2 ok, non ci sono dubbi, il terzo (files) .... dipende da cosa vuole fare $te. Si vuole ottenere che files contenga una copia del contenuto di buffer??? Oppure si vuole che ci sia un array di puntatori tale che files[0] punti a "casa" e files[1] punti a "lavoro", ecc... per le altre eventuali righe??? Il problema è tutto lì: capire cosa si vuole ottenere! ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
grande!!"hai capito!!! é proprio quello.....files[0] punterà a casa e files[1] a lavoro!!! hehe....problema mio a spiegarmi allora,scusate
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Di buffer (quello che usi per la fgets) ne hai 1 solo e viene sovrascritto ad ogni lettura di riga (ovviamente). Quindi per prima cosa dichiari, per esempio: char *linee[20]; Questo è un array di 20 puntatori. Ognuno di questi 20 puntatori può puntare ad una stringa. Poi, dopo che hai letto la riga (e tolto quel rompiscatole ![]() Nota che l'area di memoria deve essere lunga strlen(riga)+1, perché c'è anche il carattere nullo. A quel punto assegni a linee[i] il puntatore all'area allocata, dopo aver ovviamente copiato la stringa nell'area. Tutto chiaro??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
allora...io o da quel che ho capito ho fatto cosi:
while(fgets (buffer, sizeof (buffer), f)!=NULL) { if((p = strchr(buffer,'\n'))!=NULL) *p='\0'; len = strlen (buffer); linee[a] = malloc(len + 1); linee[a] = buffer; a++; } il problema che in linee[0] e linee[1] cé la stringa lavoro,come mai? dovrebbe invece essere linee[0] = casa, lenee[1] = lavoro, e invece viene sovrascritto sulla prima,come mai? forse nn ho capito le ultime cose ke mi hai detto... |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Devi fare: strcpy (linee[a], buffer);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#12 |
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
Un array altro non è che il puntatore alla prima cella di una serie allocata.
...mi pare che tutte le operazioni che fai su *p le puoi fare anche su p[] ...comunque in questo caso non ne vedo l'utilità Ultima modifica di Barbalbero : 29-08-2006 alle 09:43. |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
linee[a] = buffer linee[a] = buffer[0] <-> linee[a] = *buffer sono un po' differenti e poi, se ho capito bene, lui vuole copiare la stringa da un'altra parte, non avere il collegamento all'indirizzo della stringa sorgente. Quindi deve fare come dice Andbin
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla Ultima modifica di Marco Giunio Silano : 29-08-2006 alle 09:52. |
|
![]() |
![]() |
![]() |
#14 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ma non è quello che serve a $te. Quote:
![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 29-08-2006 alle 09:56. |
||
![]() |
![]() |
![]() |
#15 | ||
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
Quote:
![]() io intendo che puoi fare così: Codice:
char *p; char array[20]; ... //una volta allocato lo spazio per p array[a]=p[a]; Inoltre non ho detto che in questo caso va usato. Ho solamente discusso su questo punto: Quote:
|
||
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
![]()
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
![]()
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
cmq ho risolto il problema grazie ad andbin,grazie!!!
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:05.