Bonjour,

J'ai un soucis avec un bete exemple sur les pointeurs de constante dans un code que je reprends :
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;
 
}
J'insiste bien sur le fait qu'il n'y a pas de const ici, ni sur le pointeur ni sur la valeur pointee.

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.