Initiation d'un pointeur
ygj
Messages postés
78
Statut
Membre
-
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.
1 réponse
-
void main()
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");
-
merci fiddy,
pour l'entêtevoid main()
, 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,ch1 pointe vers "bon" qui est une zone allouée dans une partie en lecture seule. Pas le droit d'écrire dedans.
est ce que cette remarque est valable seulement pour les déclarations de genretype *nomPointeur;
??? -
-
-