Pointeur de chaînes et chaînes de type tableau
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
#include <stdio.h>
#include <string.h>
char *A[] = {"un", "deux", "trois"};
char *strtmp;
main()
{
strcpy (strtmp, A[2]);
printf("%s", strtmp);
getch();
} |
Bonjour à tous,
D'après plusieurs personne à qui j'ai demandé de l'aide ce programme est écrit
correctement mais il ne fonctionne pas car '*strtmp' pointe sur une zone non définie et je doit l'initialiser (ex : strtmp[10]).
Ma question est la suivante, pourquoi dans le prototype de la fonction strcpy(),
le premier argument est de type pointeur de char alors que je doit (dans ce cas là) utiliser une chaîne de type tableau pour l'initialisation.
Je souhaiterai utilisé un pointeur de char et non une chaîne de type tableau qui m'oblige à utiliser les indices.
Re: Pointeur de chaînes et chaînes de type tableau
Salut
Donc comme écrit ci-dessus ton programme devient
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <stdio.h>
#include <string.h>
char *A[] = {"un", "deux", "trois"};
char *strtmp;
main()
{
strtmp = A[0] ;
printf("%s", strtmp) ; // Affiche "un"
strtmp = A[1] ;
printf("%s", strtmp) ; // Affiche "deux"
strtmp = A[2] ;
printf("%s", strtmp) ; // Affiche "trois"
getch();
} |
Maintenant si tu veux directement écrire "un" dans strmp, il te faudra lui allouer de l'espace mémoire:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
#include <string.h>
char *strtmp;
main()
{
strtmp = malloc(3*sizeof(char)) ; // Allocation pour 3 char 'u'+'n'+'\0'
if(strtmp==NULL) exit(0) ; // Erreur d'allocation mémoire
strcpy(strtmp, "un") ;
printf("%s", strtmp) ; // Affiche "un"
free(strtmp) ; // Libère la mémoire utilisée
} |
Voila...