Newsgroup: it.comp.lang.c
Titolo: ** char pointer

credo di aver capito come si utilizza un puntatore la primo carattere di un
vettore e dopo varie prove sono riuscito ad utilizzarlo correttamente
es.
int conta(int  *ptStringa)
int main()
{
   char buffer[20];
   strcpy(buffer, "prova stringa");
   conta(&buffer[0]);
   return 0;
}
int conta(int *ptStringa)
{
     int i;
     while  (*ptStringa++) i++;
     return i;
}
ma ancora non riesco ad utilizzare questo modo di ragionare con i doppi
puntatori, ovvero con un vettore di vettori...
potete mandarmi un esempio, cosě ho una base su cui studiare?
Ciao e grazie in anticipo!!!

 potete mandarmi un esempio, cosě ho una base su cui studiare?
Eccotelo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long MaxLen( char **Strings )
{
    long maxlen = 0;
    long curlen;
    char *p;
    while( *Strings )
    {
        curlen = 0;
        p = *Strings;
        while ( *p++ ) ++curlen;
        if ( curlen > maxlen ) maxlen = curlen;
        ++Strings;
    }
    return maxlen;
}
int main()
{
   char *s[ 6 ];
   int i;
   for ( i = 0; i < 5; ++i )
       s[ i ] = malloc( 30 );
   strcpy( s[ 0 ], "Peppe" );
   strcpy( s[ 1 ], "Peppino" );
   strcpy( s[ 2 ], "Zio paperone" );
   strcpy( s[ 3 ], "Gioacchino" );
   strcpy( s[ 4 ], "Pippo" );
   s[ 5 ] = '\0';
   printf( "Massima lunghezza: %ld\n", MaxLen( s ) );
   for ( i = 0; i < 5; ++i )
       free( s[ i ] );
   return 0;
}
EMG

   s[ 5 ] = '\0';
Personalmente ritengo questo esempio poco chiaro. s[5] deve
essere impostato a NULL; usare come sintassi '\0' e' ammesso
solo perche' le costanti char sono di tipo intero e la
costante intera zero (e solo quella) e' convertibile in
qualunque puntatore.
In C++ lo statement "s[5]='\0';" sarebbe un errore visto
il diverso trattamento delle costanti char.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

il diverso trattamento delle costanti char.
Non ne capisco il motivo (credo non sia vero) e comunque qui dentro si
parla di C.
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 il diverso trattamento delle costanti char.
Più che giusto (una svista)! Ecco l'esempio corretto:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long MaxLen( char **Strings )
{
    long maxlen = 0;
    long curlen;
    char *p;
    while( *Strings )
    {
        curlen = 0;
        p = *Strings;
        while ( *p++ ) ++curlen;
        if ( curlen > maxlen ) maxlen = curlen;
        ++Strings;
    }
    return maxlen;
}
int main()
{
   char *s[ 6 ];
   int i;


 parla di C.
In effetti ho fatto la prova e né il BCC55 né il DJGPP mi segnalano
nulla.
EMG

s[ 5 ] = 0;
Si', scusate, avevo svisto a mia volta :)
E' vero, 0 e' il valore corretto.


nulla.
Questa e' una cosa interessante... io ho scritto senza fare la prova
e accurate indagini (perdonatemi) ma basandomi solo su quanto sapevo
(o credevo di sapere) sul C++. In C++ i char literal sono di tipo
char e non di tipo int come in C (e' una delle differenze subdole
rispetto al C) e quindi scrivendo '\0' non si sta scrivendo il
literal 0 ma il carattere ASCII "NUL".
Mi stupisce che i compilatori accettino questa doppia conversione
(char '\0' -> literal 0 -> puntatore nullo di qualunque tipo) ma
a quanto pare anche Comeau C++ (che si dichiara "cosi' conforme
allo standard che fa male") non ha nulla di cui lamentarsi...
Sicuramente una discussione OT in questo newsgroup. Indaghero' meglio
ed eventualmente presentero' quanto trovo in it.comp.lang.c++.
