|
|
|
|
Strumenti |
26-08-2006, 12:37 | #1 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
[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... |
26-08-2006, 14:08 | #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?
|
26-08-2006, 14:15 | #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ì... |
27-08-2006, 22:26 | #4 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
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 |
27-08-2006, 22:42 | #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
__________________
|
27-08-2006, 23:50 | #6 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
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à |
28-08-2006, 07:59 | #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%) |
28-08-2006, 13:05 | #8 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
grande!!"hai capito!!! é proprio quello.....files[0] punterà a casa e files[1] a lavoro!!! hehe....problema mio a spiegarmi allora,scusate
|
28-08-2006, 13:29 | #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 di \n), devi calcolare la lunghezza della riga (usa strlen), poi devi allocare della memoria (usa malloc) in modo da avere una area di memoria dove copiare la stringa. 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%) |
|
29-08-2006, 08:18 | #10 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
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... |
29-08-2006, 08:33 | #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%) |
|
29-08-2006, 09:34 | #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. |
29-08-2006, 09:49 | #13 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 875
|
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. |
|
29-08-2006, 09:53 | #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. |
||
29-08-2006, 09:57 | #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:
|
||
29-08-2006, 09:59 | #16 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 875
|
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 |
|
29-08-2006, 10:01 | #17 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 875
|
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 |
|
30-08-2006, 10:34 | #18 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1257
|
cmq ho risolto il problema grazie ad andbin,grazie!!!
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:03.