Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2699 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  tit prob en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tit prob en C

n°321287
peak
Posté le 02-03-2003 à 22:30:53  profilanswer
 

bon, je me debrouille pas trop trop mal en cpp mais je découvre le c et ai deux questions:
 
je veux fair un passage de parametre à une fonction avec une valeur par defaut (je le fais exectement comme en C++ )
 
et gcc veut rien savoir : "parse error befor '=' token " ??
 
par exemple :
void fct (int i = 0){
     fprintf(stdout, "i = %d", i);
}
 
kelk'un aurai il un autre technik en c qui me donnerai le même resultat ke se que j'aurai en c++??
 
 
2) je cherche à assigner à un string un bout d'un autre dont les limite inferieur et supperieur sont defini par deux entiers par exemple (i et j), je m'attend évidement a fair ça :

Code :
  1. char S1[]={"123456789"};
  2. char S2[5];
  3. unsigned c=i;
  4. while(c<j){
  5. S2[c-i]=S1[c];
  6.         c++;
  7. }
  8. fprintf(stdout, "%s\n", S1);
  9. fprintf(stdout, "%s\n", S2);


et non!! pour S2 y m'affiche un string de 9 char??  :heink:  :??:  
 

mood
Publicité
Posté le 02-03-2003 à 22:30:53  profilanswer
 

n°321298
peak
Posté le 02-03-2003 à 22:41:36  profilanswer
 

pour le 2, si je le fait avec :
char* S2;
S2=malloc(5);
ça marche mais j'aimerai vraiment bien comprendre la difference!?

n°321301
Tetedeienc​h
Head Of God
Posté le 02-03-2003 à 22:48:08  profilanswer
 

Peak a écrit :

bon, je me debrouille pas trop trop mal en cpp mais je découvre le c et ai deux questions:
 
je veux fair un passage de parametre à une fonction avec une valeur par defaut (je le fais exectement comme en C++ )
 
et gcc veut rien savoir : "parse error befor '=' token " ??
 
par exemple :
void fct (int i = 0){
     fprintf(stdout, "i = %d", i);
}
 
kelk'un aurai il un autre technik en c qui me donnerai le même resultat ke se que j'aurai en c++??
 
 
2) je cherche à assigner à un string un bout d'un autre dont les limite inferieur et supperieur sont defini par deux entiers par exemple (i et j), je m'attend évidement a fair ça :

Code :
  1. char S1[]={"123456789"};
  2. char S2[5];
  3. unsigned c=i;
  4. while(c<j){
  5. S2[c-i]=S1[c];
  6.         c++;
  7. }
  8. fprintf(stdout, "%s\n", S1);
  9. fprintf(stdout, "%s\n", S2);


et non!! pour S2 y m'affiche un string de 9 char??  :heink:  :??:  
 
 


 
A quoi ca sert de mettre une valeur par defaut a ton parametre ?
 
Quoiqu'il arrive tu devras appeler ta fonction avec une valeur pour ce parametre, en C, donc je vois pas l'interet...

n°321305
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:01:45  profilanswer
 

j'ai repondu a ton HS sur fclc++. les valeurs par défaut n'existe pas en C++. le C et le C++ sont 2 langages différents. ca ne te viendrai pas à l'idée de demander à du HTML de faire les meme choses que du Java...alors arrete le mélange

n°321306
peak
Posté le 02-03-2003 à 23:02:08  profilanswer
 

ici j'ai pris un exemple bidon pour être claire...
mais en vérité j'en ai super besoin!!
 
"Quoiqu'il arrive tu devras appeler ta fonction avec une valeur pour ce parametre, en C.."
 
mais si je met une valeur par default, je devrai pas être obligé de donner un param ?

n°321307
peak
Posté le 02-03-2003 à 23:03:55  profilanswer
 

ben y pourrai m'arriver de vouloir fair un if en JAVA  :ange:  
 

n°321308
Tetedeienc​h
Head Of God
Posté le 02-03-2003 à 23:04:22  profilanswer
 

Peak a écrit :

ici j'ai pris un exemple bidon pour être claire...
mais en vérité j'en ai super besoin!!
 
"Quoiqu'il arrive tu devras appeler ta fonction avec une valeur pour ce parametre, en C.."
 
mais si je met une valeur par default, je devrai pas être obligé de donner un param ?  


 
Si, car sinon, il va chercher une fonction definie comme :
 
void tafonction(void)
 
Et comme il y en a pas, il va te retourner une erreur.
 
En C, le nombre deparamatres autant que le nom de la fonction definit la fonction.
 
Par exemple,  
 
void sum(int a, int b)
 
et  
 
void sum (int a, int b, int c)  
 
dont deux fonctions differentes.
 
Bref, spa possible, et c'est vraiment pas indispensable a un algorithme je pense... nan ? un if regle l'affaire...

n°321310
peak
Posté le 02-03-2003 à 23:06:56  profilanswer
 

je me disait juste ke c'tai bizard de pas avoir prevu ça dans le C et ke certain avaient surtement trouvé une parade a ce problème... mais apparement je vais devoir me resigner... :(  

n°321312
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:07:40  profilanswer
 

tu te trompes: le C ne permet pas la surcharge. si tu veux resoudre, regarde du coté des macros.
 
je suis pas un pro des macros mais

Code :
  1. #define sum() sum(10)
  2. void sum(int i);

ca devrait marcher


Message édité par Taz le 02-03-2003 à 23:10:42
n°321314
peak
Posté le 02-03-2003 à 23:09:55  profilanswer
 

vous avez raison je trouverai bien une solution;
merci!
:jap:  

mood
Publicité
Posté le 02-03-2003 à 23:09:55  profilanswer
 

n°321317
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:10:54  profilanswer
 

edit grillaid

n°321319
peak
Posté le 02-03-2003 à 23:13:05  profilanswer
 

j'ai jamais vraiment compris comment marchait les macros :sweat:  
je vais essayer de trouver un tit tutorial la dessus...
 
 
 
et pour l'autre kestion :  
y'a t-il une difference entre  char* S="123";    et  char S[]={"123"};  ??


Message édité par peak le 02-03-2003 à 23:14:59
n°321320
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:13:46  profilanswer
 

oui: l'un est valide, l'autre ne passe pas à la compilation
ben la macro marche po


Message édité par Taz le 02-03-2003 à 23:15:11
n°321323
peak
Posté le 02-03-2003 à 23:16:59  profilanswer
 

chez moi y passe  :??:  
 
(gcc 3.2)

n°321331
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:23:38  profilanswer
 

ben ca devrait pas
 

Code :
  1. char *s="abc"; // est ok, s pointe vers une chaine statique et const
  2. char s2[]="abc";
  3. char s3[]={'a', 'b', 'c', '\0'};
  4. // sont equivalents


 
edit: le code que tu proposes fonctionne apparemment, mais je n'ai jamais vu rien de tel. étant donné que la synthaxe

Code :
  1. char s[]="litteral";

produit un resultat dont sur. et c'est plus court


Message édité par Taz le 02-03-2003 à 23:30:10
n°321339
peak
Posté le 02-03-2003 à 23:33:31  profilanswer
 

k, je note ;)  
et entre char S[5]; et char* S; S=malloc(5); y'a-t-il un difference?


Message édité par peak le 02-03-2003 à 23:34:13
n°321340
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:37:16  profilanswer
 

oui et elle est énorme
 
char s[] définit un tableau ([] veut dire que le compilateur déduit lui meme le nombre d'élément). généralement c'est alloué dans la pile. char s[]="a" est equivalent a char s[]={'a', '\0'} ce qui veut dire que chaque char est initialisé.
 
char *s="dawa". ici s est un pointeur qui pointe vers une zone mémorie généralement statique et read-only. donc s[0]='c' fait tout péter
 
char *s=malloc(5) est une allocation dynamique généralement dans le tas. l'usage peut etre le meme qu'avec un tableau. ne pas oublier de faire un free lorsque pour libérer cet espace

n°321343
peak
Posté le 02-03-2003 à 23:41:05  profilanswer
 

linpide!!
 
Merci à toi ++Taz  :)

n°321344
Taz
bisounours-codeur
Posté le 02-03-2003 à 23:42:00  profilanswer
 

si tu as des doutes, hesites pas

n°321346
peak
Posté le 02-03-2003 à 23:48:25  profilanswer
 

:jap:

n°340649
Musaran
Cerveaulté
Posté le 23-03-2003 à 02:32:49  profilanswer
 

++Taz a écrit :

ben la macro marche po


Le nom de macro suivi d'une parenthèse ouvrante (même après un blanc) est l'appel de macro-fonction.
Pour feinter:

Code :
  1. #define sum() (sum)(10)
  2. void (sum)(int i); //déclaration protégée de la macro
  3. int main(void){
  4. sum(); //appel de macro
  5. (sum)(1); //appel de fonction

Bref, bof...
Les macros spabien, n'est-ce pas ? :D
 
 

Peak a écrit :

y'a t-il une difference entre  char* S="123";    et  char S[]={"123"};  ??


Code :
  1. char* S="123"; //incorrect mais actuellement compilable
  2. const char* S="123"; //bon pour le futur

"123" est une chaîne littérale constante allouée une seule fois comme un tableau global.
Par compatibilité avec le passé, const n'est pas (encore) obligatoire.
 

Code :
  1. char S[]={"123"}; //{} superflu
  2. char S[]="123"; //ok

La paire d'accolades englobantes est de trop.
Mais il semblerait que le C, et par compatibilité C++, acceptent une (et une seule) paire de trop pour l'initialisation de n'importe quel tableau.


Message édité par Musaran le 23-03-2003 à 02:35:00

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  tit prob en C

 

Sujets relatifs
[PHP] Ptit prob avec easyphp 1.6 :/prob d'indentation :( [resolu]
prob lors de l'upload avec free [ - Job's Done - ]prob avec le W3C Validator... [ - Job's Done - ]
[HTML] Tableau : Prob de hauteur de cellules (avec img)[C]prob de tri
un petit prob avec visual.netchtit prob
ptit prob d'instanciation de paquetageun petit prob de noob
Plus de sujets relatifs à : tit prob en C


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)