my_strdup - C - Programmation
Marsh Posté le 11-10-2007 à 12:26:47
que str n'est pas déclaré ... et que t'as pas les bases du C vu la ligne précédente
Marsh Posté le 11-10-2007 à 12:31:47
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
Marsh Posté le 11-10-2007 à 12:53:47
compile avec plein de messages si vraiment tu ne vois pas le problème ...
superbe ta déclaration str
Marsh Posté le 11-10-2007 à 12:55:21
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
Marsh Posté le 11-10-2007 à 13:31:30
Vivement la suite de l'exercice ...
http://forum.hardware.fr/hfr/Progr [...] 8558_1.htm ...
Marsh Posté le 11-10-2007 à 13:51:51
Almazard a écrit : Voila mon sujet ; |
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 :
|
Ceci compile :
Code :
|
Pose des questions si tu ne comprends pas.
Marsh Posté le 11-10-2007 à 18:00:24
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 ?
Marsh Posté le 11-10-2007 à 18:22:30
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.
Marsh Posté le 11-10-2007 à 18:34:56
Almazard a écrit : Je n'ai pas le droit d'utiliser printf, mais seulement my_putchar. |
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...
Marsh Posté le 11-10-2007 à 19:03:18
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.)
Marsh Posté le 11-10-2007 à 19:24:19
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
Marsh Posté le 11-10-2007 à 19:49:21
epitech powa...
par contre t'es en piscine aussi...
interdiction de leecher du code sur le net...
ou -42... au choix
Marsh Posté le 11-10-2007 à 19:51:39
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()...
Marsh Posté le 11-10-2007 à 20:01:51
idem tu comprendras jamais d'ou viennent tes erreurs avec printf si tu l'as jamais recrit plus intelligemment (quelle merde printf au passage)
Marsh Posté le 11-10-2007 à 20:48:13
peyo22 a écrit : quelle merde printf au passage |
La je crois que tu aurai smieux fait de te taire
-42, c'ets votre QI moyen à l'epitech c'ets ç a?
Marsh Posté le 11-10-2007 à 22:33:23
Joel F 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
Marsh Posté le 12-10-2007 à 02:20:40
peyo22 a écrit : |
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/
Marsh Posté le 12-10-2007 à 08:34:07
peyo22 a écrit : |
Tu comprendras quand tu seras grand
Marsh Posté le 12-10-2007 à 18:28:46
peyo22 a écrit : |
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à...
Marsh Posté le 11-10-2007 à 12:24:41
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.