Erreur C avec pointeur et const char

J’ai un paramètre const char arr [] que j’essaye de parcourir,

char *ptr; for (ptr= arr; *ptr!= '\0'; ptr++) /* some code*/ 

J’obtiens une erreur: l’affectation supprime les qualificatifs du type cible du pointeur

Est-ce que const char [] est traité différemment que non-const?

Remplacez la déclaration de * ptr par.

 const char* ptr; 

Le problème est que vous atsortingbuez essentiellement un caractère const * à un caractère *. Ceci est une violation de const puisque vous passez d’un const à un non-const.

Comme JaredPar l’a dit, changez la déclaration de ptr en

 const char* ptr; 

Et ça devrait marcher. Bien que cela paraisse surprenant (comment pouvez-vous itérer un pointeur const?), Vous dites en fait que le caractère pointé est const, pas le pointeur lui-même. En fait, il existe deux endroits différents où vous pouvez appliquer const (et / ou volatile) dans une déclaration de pointeur, chacune des 4 permutations ayant une signification légèrement différente. Voici les options:

 char* ptr; // Both pointer & pointed-to value are non-const const char* ptr; // Pointed-to value is const, pointer is non-const char* const ptr; // Pointed-to value is non-const, pointer is const const char* const ptr; // Both pointer & pointed-to value are const. 

Quelqu’un (je pense que Scott Meyers) a dit que vous devriez lire les déclarations de pointeur à l’envers, c’est-à-dire:

 const char* const ptr; 

… serait lu comme “ptr est un pointeur constant sur un caractère qui est constant”.

Bonne chance!

A dessiné

La déclaration const saisit tout ce qui se trouve à gauche. S’il n’y a rien, ça a l’air bien.

Pour les boucles d’interaction comme ci-dessus où vous ne vous souciez pas de la valeur renvoyée, vous devriez dire ++ptr plutôt que ptr++ .

ptr++ signifie:

 temp = *ptr; ++ptr; return temp;` 

++ptr signifie:

 ++ptr; return *ptr; 

Pour les types primitifs, le compilateur appliquera cette optimisation mais ne le fera pas lors d’une itération sur des objects C ++. Vous devez donc vous habituer à l’écrire correctement.