Initiation d'un pointeur
ygj
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
ygj -
ygj -
Bonjour,
j'ai un petit problème à comprendre quelques instructions (6 & 7), dans le code suivant:
D'après mes connaissances:
1) pour
p est un pointeur de type chaine.
desitination renvoi l'adresse du premier caractère.
strlen(destination) renvoi la longueur de la chaine dans destination.
comment ça se fait adresse+longueur dans pointeur?
2) pour
while (*source) =>tant que on n'a pas '\0' on avance.
*P++ = *source++ ; => le contenu de P va s'écraser tout en avançant!!!
Je vous demander de me clarifier ces instructions et merci d'avance pour vos réponses.
j'ai un petit problème à comprendre quelques instructions (6 & 7), dans le code suivant:
#include <stdio.h> #include<string.h> #include<stdlib.h> char * concat ( char * destination, const char * source ) { char * P = destination + strlen(destination) ; while (*source) *P++ = *source++ ; *P = '\0';printf("%s",destination); return destination ; } void main() { char * ch1="bon"; char * ch2="jour"; concat ( ch1,ch2 ); printf("%s",ch1); }
D'après mes connaissances:
1) pour
char * P = destination + strlen(destination) ;
p est un pointeur de type chaine.
desitination renvoi l'adresse du premier caractère.
strlen(destination) renvoi la longueur de la chaine dans destination.
comment ça se fait adresse+longueur dans pointeur?
2) pour
while (*source) *P++ = *source++ ;
while (*source) =>tant que on n'a pas '\0' on avance.
*P++ = *source++ ; => le contenu de P va s'écraser tout en avançant!!!
Je vous demander de me clarifier ces instructions et merci d'avance pour vos réponses.
A voir également:
- Initiation d'un pointeur
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Pointeur souris disparu pc portable asus - Forum Windows 8 / 8.1
- Initiation au logiciel tompro pdf - Forum compta / gestion
1 réponse
void main()
Le bon prototype du main() sans argument est :
Et, cela renvoie 0 :
Pour tes questions :
1 comment ça se fait adresse+longueur dans pointeur?
adresse+longueur permet au pointeur de pointer sur le caractère de son choix (décalage). Dans le cas présent, p contiendra l'adresse du '\0' de ch1. Autrement si tu écris sur *p, tu écraseras le '\0'.
Pour le 2ème point, tu as tout juste.
L'erreur provient de l'allocation. ch1 pointe vers "bon" qui est une zone allouée dans une partie en lecture seule. Pas le droit d'écrire dedans. D'ailleurs, si tu avais le droit, ça ne serait pas bon non plus, puisqu'il n'y a pas la place.
Il faut que tu passes par un tableau suffisamment grand. Par exemple :
Ou alors, si tu veux passer par un pointeur :
Le bon prototype du main() sans argument est :
int main (void)
Et, cela renvoie 0 :
return 0;
Pour tes questions :
1 comment ça se fait adresse+longueur dans pointeur?
adresse+longueur permet au pointeur de pointer sur le caractère de son choix (décalage). Dans le cas présent, p contiendra l'adresse du '\0' de ch1. Autrement si tu écris sur *p, tu écraseras le '\0'.
Pour le 2ème point, tu as tout juste.
L'erreur provient de l'allocation. ch1 pointe vers "bon" qui est une zone allouée dans une partie en lecture seule. Pas le droit d'écrire dedans. D'ailleurs, si tu avais le droit, ça ne serait pas bon non plus, puisqu'il n'y a pas la place.
Il faut que tu passes par un tableau suffisamment grand. Par exemple :
char ch1[20]="bon";au lieu de char *ch1="bon";
Ou alors, si tu veux passer par un pointeur :
char *ch1=malloc(20*sizeof(*ch1)); strcpy(ch1,"bon");
pour l'entête , je suis d'accord avec toi, ce n'est pas standard, mais c'est juste un cours que j ai trouvé sur le net.
une autre question, d'après ta réponse, est ce que cette remarque est valable seulement pour les déclarations de genre ???
ce qu'il faut voir, c'est que ce n'est pas le pointeur qui empêche la modification mais le "..." (exception pour les tableaux)
En revanche, lorsque tu fais char tmp[]="coucou"; le compilateur crée un tableau de 7 cases dans la pile (donc en lecture / écriture) et tmp[0]='c', tmp[1]='o', ...