Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le comprendre vu que le fichier est un .c) le compile sans
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}
voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le comprendre vu que le fichier est un .c) le compile sans
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}
voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le comprendre vu que le fichier est un .c) le compile sans
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}
voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais provoque
une erreur a l'execution ("la memoire ne peut etre written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
free (sortie);
return 0;
}
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais provoque
une erreur a l'execution ("la memoire ne peut etre written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
free (sortie);
return 0;
}
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais provoque
une erreur a l'execution ("la memoire ne peut etre written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
free (sortie);
return 0;
}
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
In 'fr.comp.lang.c', DG wrote:int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
Certainement pas.
sortie = malloc (sizeof "HELLO WORLD !");
ou
sortie = malloc (strlen (tmp) + 1);
un fois que tmp est initialisé.
In 'fr.comp.lang.c', DG <dany42NOSPAM@free.fr> wrote:
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
Certainement pas.
sortie = malloc (sizeof "HELLO WORLD !");
ou
sortie = malloc (strlen (tmp) + 1);
un fois que tmp est initialisé.
In 'fr.comp.lang.c', DG wrote:int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
Certainement pas.
sortie = malloc (sizeof "HELLO WORLD !");
ou
sortie = malloc (strlen (tmp) + 1);
un fois que tmp est initialisé.
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
/* bien evidement c la que VC++ me dis que ca foire .... */
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int main(void)
{
[...]
sortie = my_strcpy(sortie,tmp);
my_printf(sortie);
return 0;
}
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
/* bien evidement c la que VC++ me dis que ca foire .... */
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int main(void)
{
[...]
sortie = my_strcpy(sortie,tmp);
my_printf(sortie);
return 0;
}
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
/* bien evidement c la que VC++ me dis que ca foire .... */
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int main(void)
{
[...]
sortie = my_strcpy(sortie,tmp);
my_printf(sortie);
return 0;
}
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le comprendre vu que le fichier est un .c) le compile sans
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")
Du mélange français/anglais dans le texte? Etonnant...
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
Typique d'un "Undefined Behaviour" (UB)je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation d'une
variable non initialisée'.
main.c: In function `my_printf':
main.c:21: warning: implicit declaration of function `_write'
main.c: In function `main':
main.c:31: warning: unused variable `j'
main.c:30: warning: `sortie' might be used uninitialized in this function
'sortie' est un pointeur sur char /non initialisé/. Tu passes donc un
contenu
indeterminé (rappel, les passages de paramètres se font par toujours par
valeur en C). La fonction ecrit bêtement à l'adresse indique (n'importe
quoi), et c'est le UB.
Un jour ça fait semblant de fonctionner, l'autre jour ça fait exploser une
fusée... Fait pas faire ça. Il faut initialiser le pointeur avec une
adresse
correcte (adresse ou nom d'un tableau, retour de malloc(), contenu d'un
pointeur correctement initialisé).
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}
voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Ce n'est pas du tout un problème de compilateur, mais de codage. Je te
conseille de relire ton livre de C. (Et je ne te parles pas de la fonction
inconnue '_write'...)
In 'fr.comp.lang.c', "Irsla" <whowen99~~no-spam@hotmail.com> wrote:
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le comprendre vu que le fichier est un .c) le compile sans
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")
Du mélange français/anglais dans le texte? Etonnant...
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
Typique d'un "Undefined Behaviour" (UB)
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation d'une
variable non initialisée'.
main.c: In function `my_printf':
main.c:21: warning: implicit declaration of function `_write'
main.c: In function `main':
main.c:31: warning: unused variable `j'
main.c:30: warning: `sortie' might be used uninitialized in this function
'sortie' est un pointeur sur char /non initialisé/. Tu passes donc un
contenu
indeterminé (rappel, les passages de paramètres se font par toujours par
valeur en C). La fonction ecrit bêtement à l'adresse indique (n'importe
quoi), et c'est le UB.
Un jour ça fait semblant de fonctionner, l'autre jour ça fait exploser une
fusée... Fait pas faire ça. Il faut initialiser le pointeur avec une
adresse
correcte (adresse ou nom d'un tableau, retour de malloc(), contenu d'un
pointeur correctement initialisé).
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}
voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Ce n'est pas du tout un problème de compilateur, mais de codage. Je te
conseille de relire ton livre de C. (Et je ne te parles pas de la fonction
inconnue '_write'...)
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le comprendre vu que le fichier est un .c) le compile sans
erreur mais provoque une erreur a l'execution ("la memoire ne peut etre
written")
Du mélange français/anglais dans le texte? Etonnant...
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
Typique d'un "Undefined Behaviour" (UB)je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation d'une
variable non initialisée'.
main.c: In function `my_printf':
main.c:21: warning: implicit declaration of function `_write'
main.c: In function `main':
main.c:31: warning: unused variable `j'
main.c:30: warning: `sortie' might be used uninitialized in this function
'sortie' est un pointeur sur char /non initialisé/. Tu passes donc un
contenu
indeterminé (rappel, les passages de paramètres se font par toujours par
valeur en C). La fonction ecrit bêtement à l'adresse indique (n'importe
quoi), et c'est le UB.
Un jour ça fait semblant de fonctionner, l'autre jour ça fait exploser une
fusée... Fait pas faire ça. Il faut initialiser le pointeur avec une
adresse
correcte (adresse ou nom d'un tableau, retour de malloc(), contenu d'un
pointeur correctement initialisé).
//puis j'impirme sortie ;)
my_printf(sortie);
return 0;
}
voila j'avoue que je ne sais qui croire en esperant que c'est un pb de
compilateur est pas de code ( ni des 2 a la fois ;) )
Ce n'est pas du tout un problème de compilateur, mais de codage. Je te
conseille de relire ton livre de C. (Et je ne te parles pas de la fonction
inconnue '_write'...)
"Irsla" <whowen99~~ writes:Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais
provoque
une erreur a l'execution ("la memoire ne peut etre written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
free (sortie);return 0;
}
Je viens de regarder rapidement ton code et il semblerait que tu es
déjà un problème dans ta fonction main. En effet, la chaîne «sortie»
n'est jamais allouée (et my_strcpy part de l'hypothèse que sa chaîne
dest est préalablement correctement allouée).
Si ça peut t'aider...
"Irsla" <whowen99~~no-spam@hotmail.com> writes:
Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais
provoque
une erreur a l'execution ("la memoire ne peut etre written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
free (sortie);
return 0;
}
Je viens de regarder rapidement ton code et il semblerait que tu es
déjà un problème dans ta fonction main. En effet, la chaîne «sortie»
n'est jamais allouée (et my_strcpy part de l'hypothèse que sa chaîne
dest est préalablement correctement allouée).
Si ça peut t'aider...
"Irsla" <whowen99~~ writes:Voila j'ai un code qui semble correct seulement voila
Visual c++ 6.0 ( oui je sais c'est du C et non du cpp mais bon il
devrait le
comprendre vu que le fichier est un .c) le compile sans erreur mais
provoque
une erreur a l'execution ("la memoire ne peut etre written")
Dev_c++ 4 (en projet C et non C++) me le compile parfaitement et je n'ai
aucun pb a l'execution
et enfin
gcc sur un Freebsd avec juste un -o ( desole je ne suis pas un grand
habituer des unixlinux ) me sort un seg fault...
donc qui croire ...
je vous colle ci contre le code :
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
while (src[i])
{
//bien evidement c la que VC++ me dis que ca foire ....
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
return (dest);
}
int my_printf(char *toprint)
{
int j=0;
for (j=0;toprint[j];j++)
{
}
_write(1,toprint,j);
return 0;
}
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
//c'est ici que je copie ce que contient tmp dans sortie
sortie = my_strcpy(sortie,tmp);
//puis j'impirme sortie ;)
my_printf(sortie);
free (sortie);return 0;
}
Je viens de regarder rapidement ton code et il semblerait que tu es
déjà un problème dans ta fonction main. En effet, la chaîne «sortie»
n'est jamais allouée (et my_strcpy part de l'hypothèse que sa chaîne
dest est préalablement correctement allouée).
Si ça peut t'aider...
Emmanuel Delahaye writes:In 'fr.comp.lang.c', DG wrote:int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
Certainement pas.
sortie = malloc (sizeof "HELLO WORLD !");
ou
sortie = malloc (strlen (tmp) + 1);
un fois que tmp est initialisé.
Yep,
J'ai un peu tout mélangé (faut dire c'est diamnche matin :-) et
surtout j'ai pas fait attention que tmp était un pointeur sur char et
non un tableau. En fait, je pensais à truc comme ça:
char tmp[] = "HELLO WORLD !";
sortie = malloc (sizeof (tmp));
Emmanuel Delahaye <emdelYOURBRA@noos.fr> writes:
In 'fr.comp.lang.c', DG <dany42NOSPAM@free.fr> wrote:
int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
Certainement pas.
sortie = malloc (sizeof "HELLO WORLD !");
ou
sortie = malloc (strlen (tmp) + 1);
un fois que tmp est initialisé.
Yep,
J'ai un peu tout mélangé (faut dire c'est diamnche matin :-) et
surtout j'ai pas fait attention que tmp était un pointeur sur char et
non un tableau. En fait, je pensais à truc comme ça:
char tmp[] = "HELLO WORLD !";
sortie = malloc (sizeof (tmp));
Emmanuel Delahaye writes:In 'fr.comp.lang.c', DG wrote:int main(void)
{
char *tmp;
char *sortie;
int j=0;
tmp = "HELLO WORLD !";
Tu n'a pas alloué la chaîne sortie. Tu peux le faire par exemple de la
manière suivante (tu peux aussi utiliser un buffer statique...) :
sortie = malloc (sizeof (tmp) + 1);
Certainement pas.
sortie = malloc (sizeof "HELLO WORLD !");
ou
sortie = malloc (strlen (tmp) + 1);
un fois que tmp est initialisé.
Yep,
J'ai un peu tout mélangé (faut dire c'est diamnche matin :-) et
surtout j'ai pas fait attention que tmp était un pointeur sur char et
non un tableau. En fait, je pensais à truc comme ça:
char tmp[] = "HELLO WORLD !";
sortie = malloc (sizeof (tmp));
"Irsla" a écrit:
[...]je vous colle ci contre le code :
Je rajouterais ceci:
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
Tu peux écrire:
int i=0;while (src[i])
{
/* bien evidement c la que VC++ me dis que ca foire .... */
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
Ceci va écrire en dehors du buffer, si le buffer destination a la
taille du buffer source.
dest[i]=' ';
return (dest);
}
Qui donne:
char *my_strcpy(char *dest, const char *src)
{
int i=0;
while (src[i])
{
dest[i] = src[i];
i++;
}
dest[i]=' ';
return (dest);
}
[...]int main(void)
{
[...]sortie = my_strcpy(sortie,tmp);
my_printf(sortie);
Tu peux écrire:
my_printf( my_strcpy(sortie,tmp) );
vu que my_strcpy retourne le pointeur sur sortie
Mais pour moi, ça ne sert à rien de retourner le pointeur du buffer
cible car il est transmit en paramètre (ça consomme des cycles CPU
pour rien). A la rigueur, tu peux retourner le nombre de char copié,
ce serait déjà plus utile AMHA.
my_strcpy(sortie,tmp);
my_printf(sortie);
ou
size_string = my_strcpy(sortie,tmp);
my_printf(sortie);return 0;
}
A
+
Jean-Marc
Novice N1
"Irsla" a écrit:
[...]
je vous colle ci contre le code :
Je rajouterais ceci:
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
Tu peux écrire:
int i=0;
while (src[i])
{
/* bien evidement c la que VC++ me dis que ca foire .... */
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
Ceci va écrire en dehors du buffer, si le buffer destination a la
taille du buffer source.
dest[i]=' ';
return (dest);
}
Qui donne:
char *my_strcpy(char *dest, const char *src)
{
int i=0;
while (src[i])
{
dest[i] = src[i];
i++;
}
dest[i]=' ';
return (dest);
}
[...]
int main(void)
{
[...]
sortie = my_strcpy(sortie,tmp);
my_printf(sortie);
Tu peux écrire:
my_printf( my_strcpy(sortie,tmp) );
vu que my_strcpy retourne le pointeur sur sortie
Mais pour moi, ça ne sert à rien de retourner le pointeur du buffer
cible car il est transmit en paramètre (ça consomme des cycles CPU
pour rien). A la rigueur, tu peux retourner le nombre de char copié,
ce serait déjà plus utile AMHA.
my_strcpy(sortie,tmp);
my_printf(sortie);
ou
size_string = my_strcpy(sortie,tmp);
my_printf(sortie);
return 0;
}
A
+
Jean-Marc
Novice N1
"Irsla" a écrit:
[...]je vous colle ci contre le code :
Je rajouterais ceci:
char *my_strcpy(char *dest,const char *src)
{
int i;
i = 0;
Tu peux écrire:
int i=0;while (src[i])
{
/* bien evidement c la que VC++ me dis que ca foire .... */
dest[i] = src[i];
i++;
}
dest[i+1]=' ';
Ceci va écrire en dehors du buffer, si le buffer destination a la
taille du buffer source.
dest[i]=' ';
return (dest);
}
Qui donne:
char *my_strcpy(char *dest, const char *src)
{
int i=0;
while (src[i])
{
dest[i] = src[i];
i++;
}
dest[i]=' ';
return (dest);
}
[...]int main(void)
{
[...]sortie = my_strcpy(sortie,tmp);
my_printf(sortie);
Tu peux écrire:
my_printf( my_strcpy(sortie,tmp) );
vu que my_strcpy retourne le pointeur sur sortie
Mais pour moi, ça ne sert à rien de retourner le pointeur du buffer
cible car il est transmit en paramètre (ça consomme des cycles CPU
pour rien). A la rigueur, tu peux retourner le nombre de char copié,
ce serait déjà plus utile AMHA.
my_strcpy(sortie,tmp);
my_printf(sortie);
ou
size_string = my_strcpy(sortie,tmp);
my_printf(sortie);return 0;
}
A
+
Jean-Marc
Novice N1