Je lisais un des tutoriels sur developpez qui disait ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char s1[11] = "Developpez"; char s2[] = "Developpez"; char *s3 = "Developpez";
La première méthode réserve une zone de 11 bytes et la chaîne "Developpez" y est stockée. La seconde méthode laisse le compilateur calculer la taille appropriée (11 bytes dans notre cas). La dernière méthode ne réserve pas de mémoire, elle se contente de stocker l'adresse d'une chaîne de caractères qui peut se trouver dans un endroit de la mémoire non modifiable par le programme, dans ce cas toute modification de la chaîne s3 se conclura par une erreur de segmentation.
Pour la dernière déclaration, je me disais que c'était tout comme si on déclarait un tableau de char, ce qui n'est pas le cas ? Un tableau de char serait plutôt comme char* tab = {'a', 'b'}; ?
Je viens de tester avec un petit exemple:
Si on lit l'énoncé cela dit: La dernière méthode ne réserve pas de mémoire, elle se contente de stocker l'adresse d'une chaîne de caractères qui peut se trouver dans un endroit de la mémoire non modifiable par le programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int main(int argc, char *argv[]) { char* s = "developpez"; printf("%s\n", s); system("PAUSE"); return 0; }
Comment se fait-il alors que cela m'affiche "developpez" à l'écran ? Il l'a quand même initialisé. Par contre on ne peut modifier la chaîne ça a planté.
Et si j'essaie les 2 autres déclaration, cela ne fonctionne pas comme un pointeur de tableau ? J'ai essayé d'incrémenter s mais en vain.
Conclusion, on peut faire un tableau de n'importe quoi dont on peut jouer avec le pointeur sauf le char ? Sauf si je fais un pointeur à part bien sûr, mais bon, c'est passer par 4 chemins selon moi.
Partager