
Envoyé par
Gryzzly
nouveautest.c:67: warning: initialization discards qualifiers from pointer target type
La ligne 67 est cette ligne:
char *ligne = "1 25 125.25";
Comment faut-il faire ?
Je suppose que tu utilises -Wwrite-strings avec gcc (ou l'équivalent avec un autre compilateur, mais le texte et le format de l'erreur est celui de gcc) dont l'objectif est de signaler ce genre de cas.
Le code que tu donnes est conforme, mais il faut faire attention car ligne est initialisé en pointant vers une zone de mémoire qui peut ne pas être modifiable, et qui peut être partagée (par exemple si la constante "125.25" apparaît ailleurs) bien que rien dans le type de ligne ne signale le problème. Un moyen de permettre au compilateur de vérifier autant que possible que la mémoire soit modifiée, c'est de déclarer ligne comme ceci:
char const* ligne = "1 25 125.25";
où tu dis que ligne pointe vers des caractères constants. Si par contre tu voulais déclarer un tableau de char et l'initialiser à la valeur constante donnée, il aurait fallu écrire:
char ligne[] = "1 25 125.25";
ligne aurait été alors un tableau de 12 char (12 à cause du \0 final), tu aurais aussi pu spécifier la taille explicitement de 11 (auquel ca il n'y aurait pas eu de \0 final) à ce que tu veux (auquel cas le tableau aurait contenu des \0 en plus).
Partager