2012-02-08 19 views
7
int :: cadena calculatelenght(const cadena& a, const char* cad) 
{ 
    cadena c; 
    int lenght = 0; 
    char* punt; punt = cad; 
    while(*punt){ 
     lenght++; punt++; 
    } 
    return lenght; 
} 

ho questo problema, voglio calcolare la lunghezza di una stringa C senza l'utilizzo di funzioni come strlen, in altri metodi della mia cadena la classe posso perché non è const char *, ma ora non so cosa fare.conversione non valida da 'const char *' a 'char *' [-fpermissive]

+7

Probabilmente non dovrebbe usare '-fpermissive'. Se normalmente si tratta di un errore, non dovresti compilarlo. –

+0

Sto usando i blocchi di codice IDE ed è la modalità di compilazione predefinita – freinn

+2

Cosa c'è di sbagliato in 'strlen (punt)'? Oppure 'std :: string' o' std :: vector 'per' c.pstr'? Molti di questi loop e variabili sembrano andare via con l'uso semplice di alcuni modelli standard. – dreamlax

risposta

9

è possibile dichiarare punt di essere del tipo corretto:

const char * punt = cad; 
+0

+1 per l'inizializzazione allo stesso tempo! – dreamlax

+0

Perché puoi (e me) farlo ?? perchè è un const ?? un puntatore normale non può inizializzare allo stesso tempo – freinn

+0

Certo che può! Perché non hai pensato? –

4

è necessario scaricare:

const char* punt; punt = cad; 
+0

Omg !! Non l'ho pensato, quindi perché diciamo che questo puntatore è "const" quando lo sposto per calcolare la lunghezza ?? : S: S – freinn

+4

@freinn puoi ancora muovere un puntatore che punta a qualcosa 'const', che' const char * 'significa che non puoi modificare _che il puntatore punta a_. Se vuoi un puntatore che non puoi _move_ ma che puoi modificare a cosa punta, allora fai 'char * const', e se vuoi un puntatore che entrambi non puoi spostare e non puoi modificare cosa punta a, hai bisogno di 'const char * const' –

+0

@freinn: non puoi cambiare il valore dell'oggetto a cui punta, ma puoi cambiare dove punta. – dreamlax

Problemi correlati