Declaration fonction en C HELP
Résolu/Fermé
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
-
18 oct. 2008 à 10:28
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 19 oct. 2008 à 15:58
crazyghandi Messages postés 312 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 4 octobre 2011 - 19 oct. 2008 à 15:58
A voir également:
- Declaration fonction en C HELP
- Déclaration de revenus - Guide
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Snapchat ils m'ont ajouté par la fonction recherche - Forum Snapchat
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 oct. 2008 à 11:50
18 oct. 2008 à 11:50
Salut,
Mets ton message d'erreur en entier ;)
Mets ton message d'erreur en entier ;)
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
18 oct. 2008 à 11:51
18 oct. 2008 à 11:51
int verif(char *t, int x){
instructions
}
marcherait beaucoup mieux. L'argument t passé à la fonction est un pointeur sur caractères.
Tu peux donc faire :
char cMaChaine[50];
rc = verif( cMaChaine , 1 );
instructions
}
marcherait beaucoup mieux. L'argument t passé à la fonction est un pointeur sur caractères.
Tu peux donc faire :
char cMaChaine[50];
rc = verif( cMaChaine , 1 );
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 oct. 2008 à 11:57
18 oct. 2008 à 11:57
Ce qu'il a mit est strictement la même chose ;)
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
18 oct. 2008 à 12:22
18 oct. 2008 à 12:22
Je ne saurais plus te dire la différence mais non ce n'est pas "strictement" la même chose (même si cela permet d'obtenir de 2 façons différentes la même chose).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
18 oct. 2008 à 12:25
18 oct. 2008 à 12:25
Si, c'est strictement.
La différence est que l'une est dans la pile et l'autre dans le tas. Sauf que là tu passes le tout en appel de fonction et qu'on ne passe que le pointeur quelque soit la notation.
Donc int fonction(char buffer[10]) est équivalent à int fonction(char buffer[]), encore équivalent à int fonction(char *buffer)
La différence est que l'une est dans la pile et l'autre dans le tas. Sauf que là tu passes le tout en appel de fonction et qu'on ne passe que le pointeur quelque soit la notation.
Donc int fonction(char buffer[10]) est équivalent à int fonction(char buffer[]), encore équivalent à int fonction(char *buffer)
saly_inf
Messages postés
44
Date d'inscription
lundi 13 octobre 2008
Statut
Membre
Dernière intervention
29 décembre 2008
4
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
18 oct. 2008 à 12:36
18 oct. 2008 à 12:36
salut...
je veux savoir seulement si la declaration "char buffer[]" veut dir que buffer est un string (pas de longueur spécifiée)...
merci d'avance..
@+
je veux savoir seulement si la declaration "char buffer[]" veut dir que buffer est un string (pas de longueur spécifiée)...
merci d'avance..
@+
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
saly_inf
Messages postés
44
Date d'inscription
lundi 13 octobre 2008
Statut
Membre
Dernière intervention
29 décembre 2008
18 oct. 2008 à 13:09
18 oct. 2008 à 13:09
Pas bien de piquer le topic des autres.
char buffer[] dans une fonction ne veut rien dire sauf si tu l'initialises à la déclaration (exemple char buffer[]="coucou")
Dans les autres cas, il faut spécifier un nombre entre les crochets pour que le compilateur réalise l'allocation statique.
char buffer[] dans une fonction ne veut rien dire sauf si tu l'initialises à la déclaration (exemple char buffer[]="coucou")
Dans les autres cas, il faut spécifier un nombre entre les crochets pour que le compilateur réalise l'allocation statique.
guillaume_74
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
22
18 oct. 2008 à 13:21
18 oct. 2008 à 13:21
Nan c'est exactement la même chose
les [] signifie que l'allocation est static, et * signifie que c'est dynamique c'est juste une allocation....
je viens de le faire chez moi, et ça marche très bien....
c'est ptètre tout simplement ce que tu lui envoie...
#include <stdio.h>
int fonfon(char t[ ],int val)
{
printf("%s\n%i\n",t,val);
system("pause");
return val+2;
}
int main()
{
int val=6;
char tab[23]={"coucou les amis"};
val= fonfon(tab,val);
printf("%i\n",val);
system("pause");
return 0;
}
les [] signifie que l'allocation est static, et * signifie que c'est dynamique c'est juste une allocation....
je viens de le faire chez moi, et ça marche très bien....
c'est ptètre tout simplement ce que tu lui envoie...
#include <stdio.h>
int fonfon(char t[ ],int val)
{
printf("%s\n%i\n",t,val);
system("pause");
return val+2;
}
int main()
{
int val=6;
char tab[23]={"coucou les amis"};
val= fonfon(tab,val);
printf("%i\n",val);
system("pause");
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 oct. 2008 à 13:27
18 oct. 2008 à 13:27
clique sur les "répondre à" quand tu parles à une personne en particulier. Là je sais pas, si c'est pour me contredire ou contredire bizu ;)
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
18 oct. 2008 à 21:38
18 oct. 2008 à 21:38
"Nan c'est exactement la même chose les [] signifie que l'allocation est static, et * signifie que c'est dynamique c'est juste une allocation.... "
=> tu le dis toi même ce n'est pas la même chose (même si au final on peut faire les mêmes choses avec, ce que je disais..)
Ce que je disais c'est que ce n'est pas "strictement" la même chose dans le sens où si on déclare en [], on peut l'utiliser comme * mais pas toujours (ou alors c'est l'inverse jsais plus).
=> tu le dis toi même ce n'est pas la même chose (même si au final on peut faire les mêmes choses avec, ce que je disais..)
Ce que je disais c'est que ce n'est pas "strictement" la même chose dans le sens où si on déclare en [], on peut l'utiliser comme * mais pas toujours (ou alors c'est l'inverse jsais plus).
guillaume_74
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
29 juillet 2010
22
>
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
18 oct. 2008 à 22:00
18 oct. 2008 à 22:00
Ouais mais ce que je voulais dire, c'est que c'était une question de normalisme... pour la compréhension.
Comme pour les classes en prog objet, il faut les nommer avec des majuscules... c'est inutile, mais c'est une norme.
Mais je suis conscient que je ne m'y connais pas plus que ça.
Je ne dirai plus rien qui contredirai quelqu'un!
Comme pour les classes en prog objet, il faut les nommer avec des majuscules... c'est inutile, mais c'est une norme.
Mais je suis conscient que je ne m'y connais pas plus que ça.
Je ne dirai plus rien qui contredirai quelqu'un!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
19 oct. 2008 à 00:55
19 oct. 2008 à 00:55
Quand on fournit un lien, faut savoir lire entre les lignes. Le lien que tu donnes dis clairement ce que je dis.
Je cite :
Le langage C n'autorise pas le passage d'un tableau en paramètre à une fonction. La raison est probablement une recherche d'efficacité, afin d'éviter des copies inutiles. Un paramètre 'pointeur' est donc exactement ce qu'il faut.
Rappelons que lorsqu'on définit un paramètre, les syntaxes type *param et type param[] sont sémantiquement équivalentes.
Ca, plus mon petit programme que je t'ai concocté pour te convaincre que c'est pareil. Que veux-tu de plus ?
Je vois très bien ce que tu veux dire, je suis tombé plein de fois sur ces cas. Mais dans le prototype de fonction non, et c'est normal car il y a équivalence (dixit par ton site) ;)
Je cite :
Le langage C n'autorise pas le passage d'un tableau en paramètre à une fonction. La raison est probablement une recherche d'efficacité, afin d'éviter des copies inutiles. Un paramètre 'pointeur' est donc exactement ce qu'il faut.
Rappelons que lorsqu'on définit un paramètre, les syntaxes type *param et type param[] sont sémantiquement équivalentes.
Ca, plus mon petit programme que je t'ai concocté pour te convaincre que c'est pareil. Que veux-tu de plus ?
Je vois très bien ce que tu veux dire, je suis tombé plein de fois sur ces cas. Mais dans le prototype de fonction non, et c'est normal car il y a équivalence (dixit par ton site) ;)
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
19 oct. 2008 à 00:58
19 oct. 2008 à 00:58
Pour en terminer, tu le dis toi-même alors qu'en dire ... pour le reste du site je l'ai lu, et c'est d'ailleurs marqué sémantiquement équivalentes et non pas strictement. Tu peux toujours dire que je chipote, oui, j'appelle un chat un chat, ce n'est pas "strictement" équivalent.
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
19 oct. 2008 à 15:40
19 oct. 2008 à 15:40
ouah ca suscite des discussions mon sujet
bon au final j'ai reussi en faisant passer le pointeur.
en revanche j'ai une nouvelle question sur la manipulation de chaine de caracteres
j'aimerai extraire n caracteres d'une chaine par exemple
const char ch = {"bonjou"};
char m = ch[2]; //me renvoie 'n' bien sur
comment faire pour recuperer 'nj'?
j'ai essaye les fonctions str et des chipotages du genre
char m=ch[2,3]
char m=ch[2:3]
char m=ch[2;3]
char m=ch[2][3]
mais je ne trouve pas
quelqu'un sait?
encore merci pour vos reponses
bon au final j'ai reussi en faisant passer le pointeur.
en revanche j'ai une nouvelle question sur la manipulation de chaine de caracteres
j'aimerai extraire n caracteres d'une chaine par exemple
const char ch = {"bonjou"};
char m = ch[2]; //me renvoie 'n' bien sur
comment faire pour recuperer 'nj'?
j'ai essaye les fonctions str et des chipotages du genre
char m=ch[2,3]
char m=ch[2:3]
char m=ch[2;3]
char m=ch[2][3]
mais je ne trouve pas
quelqu'un sait?
encore merci pour vos reponses
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
19 oct. 2008 à 15:43
19 oct. 2008 à 15:43
ouais tu fais une petite fonction qui prend en paramètres ta chaîne de caractères + 2 entier.
et tu parcours du premier au 2ème entier en concaténant les caractères ;-)
pour concaténer tu peux utiliser strcat() (je crois, je ne l'utilise jamais), j'utilise sprintf()
et tu parcours du premier au 2ème entier en concaténant les caractères ;-)
pour concaténer tu peux utiliser strcat() (je crois, je ne l'utilise jamais), j'utilise sprintf()
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
19 oct. 2008 à 15:45
19 oct. 2008 à 15:45
"nj" n'est pas un char.
Si tu veux récupérer "nj".
La façon la plus simple :
char m[3];
m[0]=ch[2];
m[1]=ch[3];
m[2]='\0';
Sinon tu peux passer aussi par strncpy ;)
Par exemple
strncpy(ch,m+2,2);
m[2]='\0';
Si tu veux récupérer "nj".
La façon la plus simple :
char m[3];
m[0]=ch[2];
m[1]=ch[3];
m[2]='\0';
Sinon tu peux passer aussi par strncpy ;)
Par exemple
strncpy(ch,m+2,2);
m[2]='\0';
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
19 oct. 2008 à 15:48
19 oct. 2008 à 15:48
oui alors justement avec strncpy comment demarrer la copie a partir d'un element de la chaine et non pa forcement par le premier element de la chaine
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19 oct. 2008 à 15:49
19 oct. 2008 à 15:49
Ben en ajoutant tout simplement.
Par exemple dans l'exemple que je te donne. Ca copie à partir de l'indice 2.
strncpy(ch,m+2,2);
Par exemple dans l'exemple que je te donne. Ca copie à partir de l'indice 2.
strncpy(ch,m+2,2);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
19 oct. 2008 à 15:46
19 oct. 2008 à 15:46
"une petite fonction qui prend en paramètres ta chaîne de caractères + 2 entier"
je comprend pa tu peux illustrer avec un peu de code svp?
merci
je comprend pa tu peux illustrer avec un peu de code svp?
merci
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
19 oct. 2008 à 15:48
19 oct. 2008 à 15:48
Pas besoin de faire cette fonction qui existe déjà. strncpy.
char m[3);
strncpy(ch,m+2,2);
m[2]='\0';
char m[3);
strncpy(ch,m+2,2);
m[2]='\0';
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
19 oct. 2008 à 15:49
19 oct. 2008 à 15:49
je l'avais oubliée celle là c'est vrai ^^
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
19 oct. 2008 à 15:53
19 oct. 2008 à 15:53
ok ca marche
mais donc je suis force d'utiliser une fction pas de m=ch[1:3] comme en fortran?
mais donc je suis force d'utiliser une fction pas de m=ch[1:3] comme en fortran?
bizu53
Messages postés
1274
Date d'inscription
samedi 30 août 2008
Statut
Membre
Dernière intervention
21 juin 2015
860
19 oct. 2008 à 15:54
19 oct. 2008 à 15:54
ouais "obligé" comme tu dis ^^
enfin, il y a peut-être d'autres astuces mais en tout cas tu ne peux pas faire de ch[1:3] ou rien comme ça.
enfin, il y a peut-être d'autres astuces mais en tout cas tu ne peux pas faire de ch[1:3] ou rien comme ça.
crazyghandi
Messages postés
312
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
4 octobre 2011
19
19 oct. 2008 à 15:58
19 oct. 2008 à 15:58
ok merci beaucoup pour votre aide je vais me debrouiller avec ca
a +
a +