[newbie]chaine de caracteres en parametres
Bonjour,
Je vou drais que ma chaine soit modifiee dans le prog principale ....
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <stdio.h>
void test(char *chaine, int *a)
{
*a = 0;
chaine = "salut";
printf("chaine: %s, a: %i\n", chaine, *a);
}
int main(int argc, char *argv[])
{
char *chaine;
int a = 10;
chaine = "Bonjour";
printf("chaine: %s, a: %i\n", chaine, a);
test(chaine, &a);
printf("chaine: %s, a: %i\n", chaine, a);
} |
Re: [newbie]chaine de caracteres en parametres
Citation:
Envoyé par Tex-Twil
Bonjour,
Je vou drais que ma chaine soit modifiee dans le prog principale ....
Il faudrait peut-être utiliser strcpy à la place de l'opérateur d'affectation...
Ta solution:
Code:
1 2 3 4 5 6 7
|
void test(char *chaine, int *a)
{
*a = 0;
chaine = "salut";
printf("chaine: %s, a: %i\n", chaine, *a);
} |
Modifie la valeur du pointeur, donc effectivement, le printf va afficher "salut". Mais ce qui se trouve dans la zone mémoire pointée par la variable chaine de ton main ne sera pas modifiée...
Pour cela, il faut utiliser la fonction strcpy. Par contre, il faut allouer une zone mémoire, pour le moment tu pointes vers des zones qui ne sont pas forcément en écriture, donc il n'est pas conseillé de les modifier...
Une version correcte serait:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#include <string.h>
#include <stdio.h>
void test(char *chaine, int *a)
{
*a = 0;
strcpy(chaine,"salut");
printf("chaine: %s, a: %i\n", chaine, *a);
}
int main()
{
char chaine[] = "Bonjour";
int a = 10;
printf("chaine: %s, a: %i\n", chaine, a);
test(chaine, &a);
printf("chaine: %s, a: %i\n", chaine, a);
return 0;
} |
Mais avant de continuer le C, révise bien les chaînes de caractères...
Jc
Re: [newbie]chaine de caracteres en parametres
Citation:
Envoyé par Tex-Twil
Je vou drais que ma chaine soit modifiee dans le prog principale ....
Code:
1 2 3 4 5
|
void test(char *chaine, int *a)
{
chaine = "salut";
} |
Pour copier une chaine, on utilise strcpy(). Attention aux débordements toujours possibles et non contrôlés en C.
La destination doit être un tableau de char et non une chaine littérale, qui n'est pas modifiable.
Si tu veux que la fonction modifie le pointeur, c'est autre chose. Il faut passer l'adresse du pointeur
ou retourner la nouvelle valeur
et modifier les paramètres et le codage en conséquence...