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   -
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

7 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Mets ton message d'erreur en entier ;)
-1
tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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 );

-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ce qu'il a mit est strictement la même chose ;)
-1
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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).
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention  
 
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)
-1
saly_inf Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   4 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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..
@+
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > saly_inf Messages postés 44 Date d'inscription   Statut Membre Dernière intervention  
 
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.
-1
guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   22
 
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;
}
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 ;)
-1
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
"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).
-1
guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   22 > bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention  
 
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!
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention  
 
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) ;)
0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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.
0
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
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
-1
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
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()
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
"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';
-1
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention  
 
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);
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
"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
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pas besoin de faire cette fonction qui existe déjà. strncpy.
char m[3);
strncpy(ch,m+2,2);
m[2]='\0';
0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
je l'avais oubliée celle là c'est vrai ^^
-1
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
ok ca marche

mais donc je suis force d'utiliser une fction pas de m=ch[1:3] comme en fortran?
-1
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
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.
0
crazyghandi Messages postés 312 Date d'inscription   Statut Membre Dernière intervention   19
 
ok merci beaucoup pour votre aide je vais me debrouiller avec ca

a +
-1