Bonjour,
J'ai un soucis avec un bete exemple sur les pointeurs de constante dans un code que je reprends :
J'insiste bien sur le fait qu'il n'y a pas de const ici, ni sur le pointeur ni sur la valeur pointee.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <strings.h> int main (void) { char * str = "bonjour"; fprintf (stdout, "declarations OK\n"); str = "toto"; fprintf (stdout, "non, ca ne peut pas fonctionner 1 \n"); fprintf (stdout, "%p : %s\n", str, str); sprintf (str, "court"); fprintf (stdout, "non, ca ne peut pas fonctionner 2 \n"); fprintf (stdout, "%p : %s\n", str, str); sprintf (str, "beaucouptroplong"); fprintf (stdout, "non, ca ne peut pas fonctionner 3 \n"); fprintf (stdout, "%p : %s\n", str, str); return EXIT_SUCCESS; }
Ma question est la suivante : est-ce que les cas ci-dessus sont corrects, et si non, pourquoi ?
J'ai bien un indice avec le fait que le sprintf crash sous Linux (les 3 cas passent sous AIX et Solaris), mais je trouve etrange le premier cas, et j'ai du mal a croire que c'est un comportement "normal".
Et surtout, si je souhaite modifier le contenu de la chaine de caractere, quel est bon comportement en gardant cette declaration ?
Pour info, j'ai bien lu ceci et je comprends bien le probleme d'overhead de cette construction, mais je ne peux pas tout re-ecrire.
Partager