OVH Cloud OVH Cloud

Probleme de compilateur... mais qui faut-il croire .....

34 réponses
Avatar
Irsla
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 unix\linux ) 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]='\0';
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 ;) )
Merci d'avance

--
Irsla
--------------------------------------------------------------------
Une visite fait toujours plaisir, si ce n'est a l'arrivée c'est au départ ;)
--------------------------------------------------------------------

10 réponses

1 2 3 4
Avatar
Gabriel Dos Reis
"Jean-Marc" writes:

| char *my_strcpy(char *dest, const char *src)
| {
| int i=0;
|
| while (src[i])
| {
| dest[i] = src[i];
| i++;
| }
| dest[i]='';

Le classique

while (*dest++ = *src++)
;

a tourjours fait ce qu'il dit.

-- Gaby
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation d'une
variable non initialisée'.


exacte je l'ai


Et ça ne t'interpelle pas plus que ça?

main.c:30: warning: `sortie' might be used uninitialized in this
function


bien pour la conclusion d'une eventuelle solution malheuresement je n'ai
aps le droit d'utiliser malloc ;)


Un tableau fera l'affaire.

pour ce qui est de la fonction _write regarde dans le msdn a : "write ou
_write"
ou alros un ptit man write , t'expliquera ce que fait cette fonction ;)


Il n'est pas question que j'aille regarder ans MSDN (on est pas sur
fr.comp.os.ms-windows.programmation)!

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/


Avatar
Irsla
"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation d'une
variable non initialisée'.


exacte je l'ai


Et ça ne t'interpelle pas plus que ça?


exact je l'ai dans vc++ mais devcpp et gcc le compile parfaitement sans me
signaler de warning et surtout l'execute parfaitement



main.c:30: warning: `sortie' might be used uninitialized in this
function


bien pour la conclusion d'une eventuelle solution malheuresement je n'ai
aps le droit d'utiliser malloc ;)


Un tableau fera l'affaire.


un tableau dynamique ? la j'avoue que je ne sais pas faire autrement qu'avec
des pointeurs


pour ce qui est de la fonction _write regarde dans le msdn a : "write ou
_write"
ou alros un ptit man write , t'expliquera ce que fait cette fonction ;)


Il n'est pas question que j'aille regarder ans MSDN (on est pas sur
fr.comp.os.ms-windows.programmation)!


oui c'est bien la le pb ( d'ailleur j'ai signaler les 2 MSDN mais aussi MAN
;) )



--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/




Avatar
Irsla
"Gabriel Dos Reis" a écrit dans le message de
news:
"Jean-Marc" writes:

| char *my_strcpy(char *dest, const char *src)
| {
| int i=0;
|
| while (src[i])
| {
| dest[i] = src[i];
| i++;
| }
| dest[i]='';

Le classique

while (*dest++ = *src++)
;


oui je l'avais essayer aussi , mais ca ne change pas le pb , qd je le
compile sous vc++ il foire ( sous dev etou gcc ca passe )


a tourjours fait ce qu'il dit.

-- Gaby


Avatar
Gabriel Dos Reis
Emmanuel Delahaye writes:

| In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:
|
| >> Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation d'une
| >> variable non initialisée'.
| >
| > exacte je l'ai
|
| Et ça ne t'interpelle pas plus que ça?

Pour les récalcitrants multi-récidivistes, -Werror.

-- Gaby
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation
d'une variable non initialisée'.


exacte je l'ai


Et ça ne t'interpelle pas plus que ça?


exact je l'ai dans vc++ mais devcpp et gcc le compile parfaitement sans
me signaler de warning et surtout l'execute parfaitement


Il faur revoir le reglage de tes compilateurs. Il y a des options à activer.
Pour gcc (dev-c++), le minimum est :

-W -Wall -O2

main.c:30: warning: `sortie' might be used uninitialized in this
function


bien pour la conclusion d'une eventuelle solution malheuresement je
n'ai aps le droit d'utiliser malloc ;)


Un tableau fera l'affaire.


un tableau dynamique ? la j'avoue que je ne sais pas faire autrement
qu'avec des pointeurs


Pourquoi dynamique? Un tableau simple est suffisant

char a[BIG_ENOUGH];

'a' est aussi l'adresse du tableau.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/




Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:


"Gabriel Dos Reis" a écrit dans le
message de news:
"Jean-Marc" writes:

| char *my_strcpy(char *dest, const char *src)
| {
| int i=0;
|
| while (src[i])
| {
| dest[i] = src[i];
| i++;
| }
| dest[i]='';

Le classique

while (*dest++ = *src++)
;


oui je l'avais essayer aussi , mais ca ne change pas le pb , qd je le
compile sous vc++ il foire ( sous dev etou gcc ca passe )


Ca foire pour les raisons évoquées avant (pointeur non initialisé). Une fois
ça corrigé, tu verras que ça fonctionnera correctement.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/


Avatar
Irsla
"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:

Voilà ton UB. Tu devrais avoir un warning du genre 'utilisation
d'une variable non initialisée'.


exacte je l'ai


Et ça ne t'interpelle pas plus que ça?


exact je l'ai dans vc++ mais devcpp et gcc le compile parfaitement sans
me signaler de warning et surtout l'execute parfaitement


Il faur revoir le reglage de tes compilateurs. Il y a des options à
activer.

Pour gcc (dev-c++), le minimum est :

-W -Wall -O2

Merci sauf que c'est VC++ qui me pose pb et pas les 2 autres ;)



main.c:30: warning: `sortie' might be used uninitialized in this
function


bien pour la conclusion d'une eventuelle solution malheuresement je
n'ai aps le droit d'utiliser malloc ;)


Un tableau fera l'affaire.


un tableau dynamique ? la j'avoue que je ne sais pas faire autrement
qu'avec des pointeurs


Pourquoi dynamique? Un tableau simple est suffisant

char a[BIG_ENOUGH];



super et si un user particulierement chiant me donne une string a
BIG_ENOUGH+1 caracteres ?
D'ou l'utilisation de pointeurs ;)






'a' est aussi l'adresse du tableau.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/



--
Irsla
--------------------------------------------------------------------
Une visite fait toujours plaisir, si ce n'est a l'arrivée c'est au départ ;)
--------------------------------------------------------------------





Avatar
Irsla
"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:


"Gabriel Dos Reis" a écrit dans le
message de news:
"Jean-Marc" writes:

| char *my_strcpy(char *dest, const char *src)
| {
| int i=0;
|
| while (src[i])
| {
| dest[i] = src[i];
| i++;
| }
| dest[i]='';

Le classique

while (*dest++ = *src++)
;


oui je l'avais essayer aussi , mais ca ne change pas le pb , qd je le
compile sous vc++ il foire ( sous dev etou gcc ca passe )


Ca foire pour les raisons évoquées avant (pointeur non initialisé). Une
fois

ça corrigé, tu verras que ça fonctionnera correctement.

--
Si je m'entete a vous prendre la tete avec ce probleme c'est que bien qu'en

ayant essayant de l'initialiser il continu a foirer ;)



-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/



--
Irsla
--------------------------------------------------------------------
Une visite fait toujours plaisir, si ce n'est a l'arrivée c'est au départ ;)
--------------------------------------------------------------------



Avatar
Irsla
"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "Irsla" <whowen99~~ wrote:


"Gabriel Dos Reis" a écrit dans le
message de news:
"Jean-Marc" writes:

| char *my_strcpy(char *dest, const char *src)
| {
| int i=0;
|
| while (src[i])
| {
| dest[i] = src[i];
| i++;
| }
| dest[i]='';

Le classique

while (*dest++ = *src++)
;


oui je l'avais essayer aussi , mais ca ne change pas le pb , qd je le
compile sous vc++ il foire ( sous dev etou gcc ca passe )


Ca foire pour les raisons évoquées avant (pointeur non initialisé). Une
fois

ça corrigé, tu verras que ça fonctionnera correctement.

Si je m'entete a vous embete avec mon pb c'est que bien qu'en ayant essayé

de l'initialiser ca foire toujours ;)



--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/



--
Irsla
--------------------------------------------------------------------
Une visite fait toujours plaisir, si ce n'est a l'arrivée c'est au départ ;)
--------------------------------------------------------------------



1 2 3 4