View previous topic :: View next topic |
Author |
Message |
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 9:42 am Post subject: [Programmazione C/C++] Manipolazione di stringhe [SOLVED] |
|
|
Ciao a tutti!
Sto cercando di fare 1 programmino molto semplice (dovrebbe esserlo ) ...ma mi sono scontrato su 1 problema... e nn capisco dove ho sbagliato:
Uso una matrice di char, e la inizializzo così:
Code: |
char lines[255*2][125];
|
All'inizio avevo pensato che non si potesse fare, ma me lo compila senza errori.. boh.
Devo "tagliare" questa stringa ad un certo punto... e tenerne il pezzo rimanente, quindi ho creato 1 puntatore a char e lo faccio puntare in mezzo alla stringa (supponendo che devo spezzare la stringa a metà e tenermi il pezzo dopo la metà):
Code: |
char * pointer;
pointer = lines[0]+62*sizeof(char);
|
al momento della compilazione mi da il seguente warning sulla riga pointer = lines[0]+62*sizeof(char):
Code: |
warning: assignment makes integer from pointer without a cast
|
Poi in esecuzione mi da segmentation fault. E non capisco! cos'ho sbagliato? ..è per l'inizializzazione della stringa vero? ..aiutatemi please! (sn molto nuibbo in C... ho sempre usato java ke fa tutto da solo )
Last edited by u238 on Mon Jul 04, 2005 11:52 am; edited 1 time in total |
|
Back to top |
|
|
Alberto Santini Tux's lil' helper
Joined: 03 Jul 2005 Posts: 88 Location: Italy->Sicily->Caltanissetta
|
Posted: Mon Jul 04, 2005 9:47 am Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe help |
|
|
u238 wrote: |
Code: |
char lines[255*2][125];
|
|
partiamo dall'inizio: questo non inizializza una stringa, ma 125 stringhe da 510 caratteri l'una |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 9:57 am Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe help |
|
|
Alberto Santini wrote: | u238 wrote: |
Code: |
char lines[255*2][125];
|
|
partiamo dall'inizio: questo non inizializza una stringa, ma 125 stringhe da 510 caratteri l'una |
non 510 stringhe da 125 caratteri l'una?
..cmq si, mi servono tutte ...quindi dovrei scrivere [125][255*2]? ...ma cmq il problema nn penso sia questo... dato ke quando provo uso la lines[0]... ho provato anche con malloc, ma nn cambiava niente... |
|
Back to top |
|
|
Alberto Santini Tux's lil' helper
Joined: 03 Jul 2005 Posts: 88 Location: Italy->Sicily->Caltanissetta
|
Posted: Mon Jul 04, 2005 10:07 am Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe help |
|
|
u238 wrote: | Alberto Santini wrote: | u238 wrote: |
Code: |
char lines[255*2][125];
|
|
partiamo dall'inizio: questo non inizializza una stringa, ma 125 stringhe da 510 caratteri l'una |
non 510 stringhe da 125 caratteri l'una?
..cmq si, mi servono tutte ...quindi dovrei scrivere [125][255*2]? ...ma cmq il problema nn penso sia questo... dato ke quando provo uso la lines[0]... ho provato anche con malloc, ma nn cambiava niente... |
si hai ragione 510 da 125 caratteri l'una
allora:
puoi usare benissimo l'aritmetica dei puntatori:
char lines[255*2][125];
char *p = lines;
p += 255*125;
e ti piazzi alla 255esima stringa |
|
Back to top |
|
|
Ic3M4n Advocate
Joined: 02 Nov 2004 Posts: 3489 Location: Bergamo.
|
Posted: Mon Jul 04, 2005 10:19 am Post subject: |
|
|
scusa ma con questo non vai fuori dalla matrice?
Quote: | pointer = lines[0]+62*sizeof(char); |
mi sembra logico che vada in seg.fault |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 10:51 am Post subject: |
|
|
Ic3M4n wrote: | scusa ma con questo non vai fuori dalla matrice?
Quote: | pointer = lines[0]+62*sizeof(char); |
mi sembra logico che vada in seg.fault |
uhmmm...
...ma allora come devo fare X spostarmi di 62 caratteri all'interno della stringa? io l'avevo pensata così:
..lines[0] è il puntatore all'inizio della stringa, poi C aggiungo 62 volte la grandezza di char per spostarmi di 62 caratteri nella stringa... nn si fa così? come devo fare? ..ma avete capito il problema? |
|
Back to top |
|
|
Ic3M4n Advocate
Joined: 02 Nov 2004 Posts: 3489 Location: Bergamo.
|
Posted: Mon Jul 04, 2005 11:03 am Post subject: |
|
|
l'errore che ti ritorna (il warning sta a significare che stai facendo una conversione implicita, tu stai facendo:
linea0 + 62 * sizeof (che sarebbe?) bit byte pesche banane? di sicuro non è un'int, quindi il warning è corretto che ci stia. |
|
Back to top |
|
|
Alberto Santini Tux's lil' helper
Joined: 03 Jul 2005 Posts: 88 Location: Italy->Sicily->Caltanissetta
|
Posted: Mon Jul 04, 2005 11:15 am Post subject: |
|
|
non c'e' bisogno di usare sizeof() ... l'aritmetica dei puntatori serve proprio a questo... esempio:
char matrice[10][20]; //10 stringhe di 20 caratteri
char *p = matrice; //p punta a matrice[0][0]
p += 3; //ora p punta a matrice[0][3]
p += 20; //ora p punta a matrice[1][3]
e' chiaro? |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 11:18 am Post subject: |
|
|
Ic3M4n wrote: | l'errore che ti ritorna (il warning sta a significare che stai facendo una conversione implicita, tu stai facendo:
linea0 + 62 * sizeof (che sarebbe?) bit byte pesche banane? di sicuro non è un'int, quindi il warning è corretto che ci stia. |
ehm... quindi? ...scusate la mia ignoranza... ma allora cme devo fare? ...devo solo incrementare il puntatore alla stringa di tot caratteri!! |
|
Back to top |
|
|
Alberto Santini Tux's lil' helper
Joined: 03 Jul 2005 Posts: 88 Location: Italy->Sicily->Caltanissetta
|
Posted: Mon Jul 04, 2005 11:18 am Post subject: |
|
|
Ic3M4n wrote: | l'errore che ti ritorna (il warning sta a significare che stai facendo una conversione implicita, tu stai facendo:
linea0 + 62 * sizeof (che sarebbe?) bit byte pesche banane? di sicuro non è un'int, quindi il warning è corretto che ci stia. |
ovvio: se hai p di tipo char*, non puoi assegnargli un char + un size_t senza conversioni |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 11:30 am Post subject: |
|
|
Alberto Santini wrote: | Ic3M4n wrote: | l'errore che ti ritorna (il warning sta a significare che stai facendo una conversione implicita, tu stai facendo:
linea0 + 62 * sizeof (che sarebbe?) bit byte pesche banane? di sicuro non è un'int, quindi il warning è corretto che ci stia. |
ovvio: se hai p di tipo char*, non puoi assegnargli un char + un size_t senza conversioni |
quindi la conversione come la devo fare?
così? :
Code: |
char * p;
p = (char *)(lines[0]+62*sizeof(char));
|
...ma mi da lo stesso errore... nn potete darmi 1 possibile soluzione?
[EDIT]
ma lines[0] nn è un puntatore a char? ..o è un char? devo metterci una &?
[/EDIT] |
|
Back to top |
|
|
Alberto Santini Tux's lil' helper
Joined: 03 Jul 2005 Posts: 88 Location: Italy->Sicily->Caltanissetta
|
Posted: Mon Jul 04, 2005 11:32 am Post subject: |
|
|
Alberto Santini wrote: | non c'e' bisogno di usare sizeof() ... l'aritmetica dei puntatori serve proprio a questo... esempio:
char matrice[10][20]; //10 stringhe di 20 caratteri
char *p = matrice; //p punta a matrice[0][0]
p += 3; //ora p punta a matrice[0][3]
p += 20; //ora p punta a matrice[1][3]
e' chiaro? |
ma l'hai letto quello che ho scritto? -.- |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 11:38 am Post subject: |
|
|
Alberto Santini wrote: | Alberto Santini wrote: | non c'e' bisogno di usare sizeof() ... l'aritmetica dei puntatori serve proprio a questo... esempio:
char matrice[10][20]; //10 stringhe di 20 caratteri
char *p = matrice; //p punta a matrice[0][0]
p += 3; //ora p punta a matrice[0][3]
p += 20; //ora p punta a matrice[1][3]
e' chiaro? |
ma l'hai letto quello che ho scritto? -.- |
...mi da il warning "warning: initialization from incompatible pointer type" sulla riga "char * p = matrice;" ....leggo ben cosa scrivi... l'avevo provato, ma nn va neanke questo... ora mi viene il dubbio ke sia il mio programma che non va.. faccio 1 test a parte, cn 1 main che fa solo quello... e voglio vedere! |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 11:41 am Post subject: |
|
|
niente da fare...
Code: |
#include <stdio.h>
#include <string.h>
int main ()
{
char matrice [10][20];
char * p = matrice;
p += 3;
p += 20;
return 0;
}
|
...provate a compilarlo... |
|
Back to top |
|
|
emix Veteran
Joined: 30 Nov 2003 Posts: 1014
|
Posted: Mon Jul 04, 2005 11:44 am Post subject: |
|
|
u238 wrote: | ...mi da il warning "warning: initialization from incompatible pointer type" sulla riga "char * p = matrice;" |
Perchè "matrice" è un char**, dovresti fare un
|
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 11:48 am Post subject: |
|
|
emix wrote: | u238 wrote: | ...mi da il warning "warning: initialization from incompatible pointer type" sulla riga "char * p = matrice;" |
Perchè "matrice" è un char**, dovresti fare un
|
grande! hai ragione!!! ...ora compila! ...provo a modificare il mio programmino a vi faccio sapere.. grazie mille |
|
Back to top |
|
|
u238 Guru
Joined: 04 Mar 2005 Posts: 373
|
Posted: Mon Jul 04, 2005 11:51 am Post subject: |
|
|
funziona! grazie ancora.. cn sti puntatori divento scemo! grazie |
|
Back to top |
|
|
emix Veteran
Joined: 30 Nov 2003 Posts: 1014
|
Posted: Mon Jul 04, 2005 11:56 am Post subject: |
|
|
u238 wrote: | funziona! grazie ancora.. cn sti puntatori divento scemo! grazie |
E' solo questione di abitudine e di pratica |
|
Back to top |
|
|
AlterX l33t
Joined: 03 Apr 2004 Posts: 754 Location: rm -rf /*
|
Posted: Mon Jul 04, 2005 3:35 pm Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe [SOLVED |
|
|
u238 wrote: | Ciao a tutti!
Sto cercando di fare 1 programmino molto semplice (dovrebbe esserlo ) ...ma mi sono scontrato su 1 problema... e nn capisco dove ho sbagliato:
Uso una matrice di char, e la inizializzo così:
Code: |
char lines[255*2][125];
|
All'inizio avevo pensato che non si potesse fare, ma me lo compila senza errori.. boh.
|
Perchè non si potrebbe fare?!?!
Sono numeri e quindi costanti...vanno bene!
A parte che nello standard C++ se non erro è ora possibile specificare delle variabili
come dimensioni dell'array, in fase di compilazione. |
|
Back to top |
|
|
|