Bonjour,
Tu oublies qu'une chaine de caractères en C se termine par '\0' 
Si par exemple on a tapé :
1 2
| "Hello " // pour chaine1
"World" // pour chaine2 |
Tu auras dans tes tableaux les caractères :
- chaine1 : {'H', 'e', 'l', 'l', 'o', ' ', '\0', ...}
- chaine2 : {'W', 'o', 'r', 'l', 'd', '\0', ...}
les ... désignant les autres caractères (complètement aléatoires) contenus dans la mémoire qui reste dans les tableaux.
Avec ton code tu ne vas copier que {'W', 'o', 'r', 'l', 'd'} à la suite de chaine1 et vas donc te retrouver avec :
{'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', ...}
Ainsi lors de l'affichage avec
printf("la chaine concatenée : %s",chaine1);
printf va continuer dans nos ... jusqu'à rencontrer une caractère '\0' final, qui peut être n'importe où, même après les 100 caractères que peut contenir chaine1, ce qui a de bonnes chances de faire planter ton programme.
Ainsi donc rajoute le '\0' à la fin 
Tu peux par exemple le faire en rajoutant le = ici :
for(p1=chaine1+taille1,p2=chaine2 ;p2<=chaine2+taille2 ;p1++ , p2++)
Remarques :
- Plutôt que gets, utilise fgets à la place, pour une saisie sécurisée qui t'empêchera de saisir trop de caractères par rapport à la taille de tes tableaux.
- vérifie que taille1+taille2 < 100, tu ne voudrais pas écrire au delà de ton tableau

- évite l'utilisation de getch(); et <conio.h> non portable : préfère getchar() dans <stdio.h>
- Le prototype correct de main en C est :
et un return qui va avec, c'est mieux 
Partager