Declaration fonction en C HELP
Résolu
crazyghandi
Messages postés
312
Date d'inscription
Statut
Membre
Dernière intervention
-
crazyghandi Messages postés 312 Date d'inscription Statut Membre Dernière intervention -
crazyghandi Messages postés 312 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je démarre un programme en C par une fonction toute simple déclarée de la facon suivante :
int verif(char t[], int x){
instructions
}
le compilateur rend l'erreur suivante :
error parsing parameter list, found "[" when expecting ........
Je comprends pas, aidez moi svp
merci d'avance
Je démarre un programme en C par une fonction toute simple déclarée de la facon suivante :
int verif(char t[], int x){
instructions
}
le compilateur rend l'erreur suivante :
error parsing parameter list, found "[" when expecting ........
Je comprends pas, aidez moi svp
merci d'avance
A voir également:
- Declaration fonction en C HELP
- Déclaration - Guide
- En plus des revenus, il ne faut surtout pas oublier de faire cette déclaration en ligne aux impôts - Guide
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
7 réponses
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 );
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)
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;
}
"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).
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!
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) ;)
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
"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