Declaration fonction en C HELP
Résolu
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
Configuration: Windows Vista Opera 9.50
7 réponses
-
ContributeurSalut,
Mets ton message d'erreur en entier ;) -
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 );
-
-
@fiddyJe 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).
-
Contributeur@Utilisateur anonymeSi, 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) -
@fiddysalut...
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..
@+ -
Contributeur@saly_infPas 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.
-
-
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;
}-
-
"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). -
@fiddyNon je ne te contredit pas du tout^^ c'est juste que je voulais répondre :D mais... j'ai du faire un truc ou deux, et quand je suis revenu, des gens avaient posté entre temps :D lol
Moi je pensais juste qu'il avait fait une erreur dans le passage de paramètre, après je sais pas... -
@Utilisateur anonymeOuais 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! -
Contributeur@Utilisateur anonymeNon et non.
C'est bien strictement la même chose dans le cadre d'une fonction.
Par exemple int fonction(char *toto) est équivalent à int fonction (char toto[]). Exactement pareil. Vérifie par toi même en regardant les différences entre les sizeof. Tu verras aucune différence, et pour cause c'est strictement pareil.
En revanche, dans le corps d'une fonction, ce n'est pas du tout pareil. Le char toto[5] va initialiser statiquement une zone dans la pile alors que le char *buffer, initialisera un pointeur qui pointera dans une zone qu'on devra déclarer dans le heap à l'aide de malloc ou cie.
-
-
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-
-
-
@fiddyoui 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
-
Contributeur@crazyghandiBen 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);
-
-
"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-
-
@fiddyje l'avais oubliée celle là c'est vrai ^^
-
-
ok ca marche
mais donc je suis force d'utiliser une fction pas de m=ch[1:3] comme en fortran? -
ok merci beaucoup pour votre aide je vais me debrouiller avec ca
a +