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

  FORUM HardWare.fr
  Programmation
  C

  my_strdup

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

my_strdup

n°1622209
Almazard
Posté le 11-10-2007 à 12:24:41  profilanswer
 

Voila mon sujet ;
Écrire une fonction qui alloue suffisament de memoire et copie la chaîne de caractère passée en argument. Elle renvoie un pointeur sur la nouvelle chaîne allouée.
 
J'ai code ceci:
 
void     *malloc();
 
void     my_putchar(char c)
{
  write(1, &c, 1);
}
 
int     my_strlen(char *str)
{
  int count;
 
  count = 0;
  while (*str++)
    {
      count++;
    }
  return (count);
}
 
char     *my_strcpy(char *dest, char *src)
{
  char *ret;
 
  ret = dest;
  while (*src)
    *dest++ = *src++;
  *dest = 0;
  return (ret);
}
 
char     *my_strdup(char *str)
{
  char *s;
 
  if ((s = malloc(my_strlen(str))) == 0)
    return (0);
  my_strcpy(s, str);
  return (s);
}
 
int     main(int ac, char **av)
{
  *my_strdup('essai');
  return(*str);
}
 
Quand je compile il me met que j'ai une erreur sur ce qui est en gras, mais je ne vois pas d'ou cela peut venir.

mood
Publicité
Posté le 11-10-2007 à 12:24:41  profilanswer
 

n°1622210
Taz
bisounours-codeur
Posté le 11-10-2007 à 12:26:47  profilanswer
 

que str n'est pas déclaré ... et que t'as pas les bases du C vu la ligne précédente


Message édité par Taz le 11-10-2007 à 12:27:10
n°1622212
Almazard
Posté le 11-10-2007 à 12:31:47  profilanswer
 

XD C'est vrai.
Mais maintenant quand ja declare j'ai comme message d'erreur : warning: passing arg 1 of `my_strdup' makes pointer from integer without a cast


Message édité par Almazard le 11-10-2007 à 13:04:41
n°1622227
Taz
bisounours-codeur
Posté le 11-10-2007 à 12:53:47  profilanswer
 

compile avec plein de messages si vraiment tu ne vois pas le problème ...

 

superbe ta déclaration str


Message édité par Taz le 11-10-2007 à 12:54:08
n°1622228
Taz
bisounours-codeur
Posté le 11-10-2007 à 12:55:21  profilanswer
 

joli devoir, t'as pompé my_strdup à ton voisin mais t'arrive même pas à t'en servir. Il n'est pas trop tard, l'année n'a pas commencé depuis longtemps, reprends tout depuis le début

n°1622254
Olivier51
Posté le 11-10-2007 à 13:31:30  profilanswer
 

Vivement la suite de l'exercice ...
http://forum.hardware.fr/hfr/Progr [...] 8558_1.htm ...

n°1622280
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-10-2007 à 13:51:51  profilanswer
 

Almazard a écrit :

Voila mon sujet ;
Écrire une fonction qui alloue suffisament de memoire et copie la chaîne de caractère passée en argument. Elle renvoie un pointeur sur la nouvelle chaîne allouée.
 
J'ai code ceci:
<...>
Quand je compile il me met que j'ai une erreur sur ce qui est en gras, mais je ne vois pas d'ou cela peut venir.


Déjà, tu devrais lire les règles du forum pour apprendre à rédiger ton post correctement. Le code doit être balisé comme il faut.
 
Ensuite, tu devrais mieux régler ton compilateur, parce que ce code est une abomination :  


Project   : Forums
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c:1: warning: function declaration isn't a prototype
main.c: In function `my_putchar':
main.c:5: warning: implicit declaration of function `write'
main.c:43:14: warning: character constant too long for its type
main.c: In function `main':
main.c:43: warning: passing arg 1 of `my_strdup' makes pointer from integer without a cast
main.c:44: error: `str' undeclared (first use in this function)
main.c:44: error: (Each undeclared identifier is reported only once
main.c:44: error: for each function it appears in.)
main.c: At top level:
main.c:41: warning: unused parameter 'ac'
main.c:41: warning: unused parameter 'av'
Process terminated with status 1 (0 minutes, 5 seconds)
3 errors, 6 warnings


Ceci compile :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int my_strlen (char const *str)
  4. {
  5.    int count;
  6.    count = 0;
  7.    while (*str++)
  8.    {
  9.       count++;
  10.    }
  11.    return count;
  12. }
  13. char *my_strcpy (char *dest, char const *src)
  14. {
  15.    char *ret = dest;
  16.    while (*src)
  17.    {
  18.       *dest++ = *src++;
  19.    }
  20.    *dest = 0;
  21.    return ret;
  22. }
  23. char *my_strdup (char const *str)
  24. {
  25.    char *s = malloc (my_strlen (str) + 1);
  26.    if (s != NULL)
  27.    {
  28.       my_strcpy (s, str);
  29.    }
  30.    return s;
  31. }
  32. int main (void)
  33. {
  34.    char *s = my_strdup ("essai" );
  35.    if (s != NULL)
  36.    {
  37.       printf ("'%s'\n", s);
  38.       free (s), s = NULL;
  39.    }
  40.    return 0;
  41. }


Pose des questions si tu ne comprends pas.


Message édité par Emmanuel Delahaye le 11-10-2007 à 14:06:12

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1622528
Almazard
Posté le 11-10-2007 à 18:00:24  profilanswer
 

Je n'ai pas le droit d'utiliser printf, mais seulement my_putchar.
 
NULL est égal à 0 ? Je ne vois pas où tu as mis que NULL est égal à zéro ? On met ça dans un #define ?

n°1622552
Taz
bisounours-codeur
Posté le 11-10-2007 à 18:22:30  profilanswer
 

Almazard a écrit :

Je n'ai pas le droit d'utiliser printf, mais seulement my_putchar.


allo, c'est un exemple.

 

PS: nous apprecions tous ton my_putchar dont l'implémentation repose sur du pas standard.


Message édité par Taz le 11-10-2007 à 18:23:09
n°1622563
Sve@r
Posté le 11-10-2007 à 18:34:56  profilanswer
 

Almazard a écrit :

Je n'ai pas le droit d'utiliser printf, mais seulement my_putchar.
 
NULL est égal à 0 ? Je ne vois pas où tu as mis que NULL est égal à zéro ? On met ça dans un #define ?


Ca a longtemps été défini dans stdio.h. Aujourd'hui je suis pas sûr mais il me semble que c'est défini ailleurs mais sais plus trop où. De toute façon tout le monde s'en fout de savoir où c'est défini et aussi de sa valeur. C'est le principe des macro => utiliser un mnémonique à la place d'une valeur => si la valeur change, il suffit de recompiler et ça remarche. Mais pour info, NULL n'est pas égal à 0, il est égal à "(void *)0" (où autrement dit "zéro converti en adresse" ). Comme le dit Taz, il n'est pas trop tard pour s'y (re)mettre un peu plus sérieusement...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 11-10-2007 à 18:34:56  profilanswer
 

n°1622577
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-10-2007 à 19:03:18  profilanswer
 

Almazard a écrit :

Je n'ai pas le droit d'utiliser printf, mais seulement my_putchar.


Je te laisse faire les boucles qui vont bien (ou la fonction, genre my_puts()...)

Citation :

NULL est égal à 0 ? Je ne vois pas où tu as mis que NULL est égal à zéro ? On met ça dans un #define ?


Mais qu'est-ce qu'on vous apprend dans cette école ? Ca fait partie de la définition du langage C. Dans le contexte pointeur, NULL vaut 0 (null pointer constant). C'est défini dans <stddef.h> qui est lui même inclus dans la plupart des headers standards (<stdio.h>, <stdlib.h> etc.)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1622582
Almazard
Posté le 11-10-2007 à 19:24:19  profilanswer
 

Jusque maintenant on n'a eu le droit d'utiliser seulement les fonctions que l'on a nous même codé, donc on n'a pas eu le droit à lib stdio.h

n°1622590
peyo22
Free heel :)
Posté le 11-10-2007 à 19:49:21  profilanswer
 

epitech powa...
 
par contre t'es en piscine aussi...
 
interdiction de leecher du code sur le net...
ou -42... au choix :)


---------------
"Se tromper est humain ; Vraiment foutre la merde necessite le mot de passe de root."
n°1622591
Sve@r
Posté le 11-10-2007 à 19:51:39  profilanswer
 

Almazard a écrit :

Jusque maintenant on n'a eu le droit d'utiliser seulement les fonctions que l'on a nous même codé, donc on n'a pas eu le droit à lib stdio.h


C'est normal. Ca te permet de comprendre comment sont faites les choses. Tu ne sauras jamais pourquoi le C inclu un caractère nul dans ses chaînes si t'as pas écrit au-moins une fois dans ta vie un clone de strlen()...


Message édité par Sve@r le 11-10-2007 à 19:52:22

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1622594
peyo22
Free heel :)
Posté le 11-10-2007 à 20:01:51  profilanswer
 

idem tu comprendras jamais d'ou viennent tes erreurs avec printf si tu l'as jamais recrit plus intelligemment (quelle merde printf au passage)


---------------
"Se tromper est humain ; Vraiment foutre la merde necessite le mot de passe de root."
n°1622618
Joel F
Real men use unique_ptr
Posté le 11-10-2007 à 20:48:13  profilanswer
 

peyo22 a écrit :

quelle merde printf au passage

 

La je crois que tu aurai smieux fait de te taire :o
-42, c'ets votre QI moyen à l'epitech c'ets ç a?

Message cité 1 fois
Message édité par Joel F le 11-10-2007 à 20:52:18
n°1622658
peyo22
Free heel :)
Posté le 11-10-2007 à 22:33:23  profilanswer
 

Joel F a écrit :


 
La je crois que tu aurai smieux fait de te taire :o
-42, c'ets votre QI moyen à l'epitech c'ets ç a?


ou pas... quel est l'interet de bufferiser ce que tu donnes a manger a printf ? tu m'expliques?
pis printf+write ca vole violemment....
 
et no comment pour le reste :) je ne mange pas de ce pain la mon grand


---------------
"Se tromper est humain ; Vraiment foutre la merde necessite le mot de passe de root."
n°1622682
Olivier51
Posté le 12-10-2007 à 02:20:40  profilanswer
 

peyo22 a écrit :


ou pas... quel est l'interet de bufferiser ce que tu donnes a manger a printf ? tu m'expliques?
pis printf+write ca vole violemment....
 
et no comment pour le reste :) je ne mange pas de ce pain la mon grand


Tu crois vraiment qu'ils se sont amusés à compliquer l'écriture du printf pour s'amuser ?
 
 
 
 
 
 
Pour ne pas te laisser dans l'ignorance, voici le concept : http://www.pixelbeat.org/programming/stdio_buffering/

n°1622703
Joel F
Real men use unique_ptr
Posté le 12-10-2007 à 08:34:07  profilanswer
 

peyo22 a écrit :


ou pas... quel est l'interet de bufferiser ce que tu donnes a manger a printf ? tu m'expliques?


Tu comprendras quand tu seras grand :o

n°1623165
Sve@r
Posté le 12-10-2007 à 18:28:46  profilanswer
 

peyo22 a écrit :


ou pas... quel est l'interet de bufferiser ce que tu donnes a manger a printf ? tu m'expliques?


C'est probablement parce que les grandes familles de printf (fprintf, sprintf, etc) travaillent toutes à partir d'une fonction de base et que la bufferisation se fait là...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

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

  my_strdup

 

Sujets relatifs
reprogrammer strdup ? 
Plus de sujets relatifs à : my_strdup


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR