Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Programmazione C/C++] Manipolazione di stringhe [SOLVED]
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 9:42 am    Post subject: [Programmazione C/C++] Manipolazione di stringhe [SOLVED] Reply with quote

Ciao a tutti!

Sto cercando di fare 1 programmino molto semplice (dovrebbe esserlo :lol:) ...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
View user's profile Send private message
Alberto Santini
Tux's lil' helper
Tux's lil' helper


Joined: 03 Jul 2005
Posts: 88
Location: Italy->Sicily->Caltanissetta

PostPosted: Mon Jul 04, 2005 9:47 am    Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe help Reply with quote

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
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 9:57 am    Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe help Reply with quote

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 :D ...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
View user's profile Send private message
Alberto Santini
Tux's lil' helper
Tux's lil' helper


Joined: 03 Jul 2005
Posts: 88
Location: Italy->Sicily->Caltanissetta

PostPosted: Mon Jul 04, 2005 10:07 am    Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe help Reply with quote

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 :D ...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
View user's profile Send private message
Ic3M4n
Advocate
Advocate


Joined: 02 Nov 2004
Posts: 3489
Location: Bergamo.

PostPosted: Mon Jul 04, 2005 10:19 am    Post subject: Reply with quote

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
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 10:51 am    Post subject: Reply with quote

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
View user's profile Send private message
Ic3M4n
Advocate
Advocate


Joined: 02 Nov 2004
Posts: 3489
Location: Bergamo.

PostPosted: Mon Jul 04, 2005 11:03 am    Post subject: Reply with quote

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
View user's profile Send private message
Alberto Santini
Tux's lil' helper
Tux's lil' helper


Joined: 03 Jul 2005
Posts: 88
Location: Italy->Sicily->Caltanissetta

PostPosted: Mon Jul 04, 2005 11:15 am    Post subject: Reply with quote

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
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 11:18 am    Post subject: Reply with quote

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? :D ...scusate la mia ignoranza... ma allora cme devo fare? ...devo solo incrementare il puntatore alla stringa di tot caratteri!!
Back to top
View user's profile Send private message
Alberto Santini
Tux's lil' helper
Tux's lil' helper


Joined: 03 Jul 2005
Posts: 88
Location: Italy->Sicily->Caltanissetta

PostPosted: Mon Jul 04, 2005 11:18 am    Post subject: Reply with quote

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
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 11:30 am    Post subject: Reply with quote

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
View user's profile Send private message
Alberto Santini
Tux's lil' helper
Tux's lil' helper


Joined: 03 Jul 2005
Posts: 88
Location: Italy->Sicily->Caltanissetta

PostPosted: Mon Jul 04, 2005 11:32 am    Post subject: Reply with quote

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
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 11:38 am    Post subject: Reply with quote

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
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 11:41 am    Post subject: Reply with quote

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
View user's profile Send private message
emix
Veteran
Veteran


Joined: 30 Nov 2003
Posts: 1014

PostPosted: Mon Jul 04, 2005 11:44 am    Post subject: Reply with quote

u238 wrote:
...mi da il warning "warning: initialization from incompatible pointer type" sulla riga "char * p = matrice;"

Perchè "matrice" è un char**, dovresti fare un
Code:
char *p = *matrice
Back to top
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 11:48 am    Post subject: Reply with quote

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
Code:
char *p = *matrice


grande! hai ragione!!! ...ora compila! ...provo a modificare il mio programmino a vi faccio sapere.. grazie mille ;)
Back to top
View user's profile Send private message
u238
Guru
Guru


Joined: 04 Mar 2005
Posts: 373

PostPosted: Mon Jul 04, 2005 11:51 am    Post subject: Reply with quote

funziona! grazie ancora.. cn sti puntatori divento scemo! grazie ;)
Back to top
View user's profile Send private message
emix
Veteran
Veteran


Joined: 30 Nov 2003
Posts: 1014

PostPosted: Mon Jul 04, 2005 11:56 am    Post subject: Reply with quote

u238 wrote:
funziona! grazie ancora.. cn sti puntatori divento scemo! grazie ;)

E' solo questione di abitudine e di pratica :wink:
Back to top
View user's profile Send private message
AlterX
l33t
l33t


Joined: 03 Apr 2004
Posts: 754
Location: rm -rf /*

PostPosted: Mon Jul 04, 2005 3:35 pm    Post subject: Re: [Programmazione C/C++] Manipolazione di stringhe [SOLVED Reply with quote

u238 wrote:
Ciao a tutti!

Sto cercando di fare 1 programmino molto semplice (dovrebbe esserlo :lol:) ...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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum