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

  FORUM HardWare.fr
  Programmation
  C

  Pouvez-vous me dire ce qui ne va pas ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pouvez-vous me dire ce qui ne va pas ?

n°983682
Froozen
Posté le 16-02-2005 à 16:19:49  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(int argc, char *argv[]) {
  4. int j=0;
  5. while (j<2) {
  6.  char *titi;
  7.  char *tutu;
  8.  char *tata;
  9.  int i=1;
  10.  tutu = (char*)malloc(22*sizeof(char));
  11.  tutu = "Salut.Bah.voilà.skoul";
  12.  printf("Valeur de tutu : %s", tutu);
  13.  titi = (char*)malloc(sizeof(tutu));
  14.  strcpy(titi, tutu);
  15.  printf("Valeur de titi : %s", titi);
  16.  tata=strtok(titi, "." );
  17.  while (tata!=NULL) {
  18.   printf("Occurence %d de la boucle.", i);
  19.   printf("Valeur de tata : %s", tata);
  20.   tata=strtok(NULL, "." );
  21.   i++;
  22.  }
  23.  printf("Valeur de titi finale : %s", titi);
  24.  j++;
  25.  free(titi);
  26.  free(tutu);
  27.  free(tata);
  28. }
  29. }


 
Lors de l'exécution, j'obtiens le message :

Code :
  1. 10 [main] test 236 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
  2. 888 [main] test 236 open_stackdumpfile: Dumping stack trace to test.exe.stac
  3. kdump


Ceci lors du premier rebouclage de la boucle While...
Je ne comprends pas pourquoi  :??:
Visiblement il plante au premier malloc  :ouch:  
 
Merci pour votre aide :jap:
Froozen.

mood
Publicité
Posté le 16-02-2005 à 16:19:49  profilanswer
 

n°983686
KangOl
Profil : pointeur
Posté le 16-02-2005 à 16:22:20  profilanswer
 

la ligne 13 est completement fausse :o


---------------
Nos estans firs di nosse pitite patreye...
n°983688
Froozen
Posté le 16-02-2005 à 16:23:32  profilanswer
 

Code :
  1. strcpy(tutu, "Salut.bah.voilà.skwul" )


 
C'est mieux ? :)

n°983690
KangOl
Profil : pointeur
Posté le 16-02-2005 à 16:24:28  profilanswer
 

oui !


---------------
Nos estans firs di nosse pitite patreye...
n°983703
Froozen
Posté le 16-02-2005 à 16:41:38  profilanswer
 

Merci :D

n°983705
Taz
bisounours-codeur
Posté le 16-02-2005 à 16:42:40  profilanswer
 

"Salut.Bah.voilà.skoul"
 
ça fait 23 caractères

n°983718
chrisbk
-
Posté le 16-02-2005 à 16:51:14  profilanswer
 

#         tutu = (char*)malloc(22*sizeof(char));
#         tutu = "Salut.Bah.voilà.skoul";
 
=>=>=>
 
tutu = strdup("Salut.Bah.voilà.skoul" );
 
 
#         titi = (char*)malloc(sizeof(tutu));
#
#         strcpy(titi, tutu)
 
=>=>=>=
 
titi = strdup(tutu);
 
 
jsais pas pkoi personne ne l'aime, ste fonction.

n°983724
Mr Mala
Posté le 16-02-2005 à 16:54:56  profilanswer
 

Taz a écrit :

"Salut.Bah.voilà.skoul"
 
ça fait 23 caractères


 
heuuuuuuuuuuuuu :heink:

n°983735
Taz
bisounours-codeur
Posté le 16-02-2005 à 16:58:16  profilanswer
 

chrisbk a écrit :


titi = strdup(tutu);
 
 
jsais pas pkoi personne ne l'aime, ste fonction.


si je te réponds, ça va te paraître évident
 
SPA STANDARD BORDEL :o

n°983736
Taz
bisounours-codeur
Posté le 16-02-2005 à 16:59:07  profilanswer
 

Mr Mala a écrit :

heuuuuuuuuuuuuu :heink:


vas-y compte. et si t'es doué en algèbre, utilise l'opérateur sizeof (et sans parenthèses si possible)

mood
Publicité
Posté le 16-02-2005 à 16:59:07  profilanswer
 

n°983739
masklinn
í dag viðrar vel til loftárása
Posté le 16-02-2005 à 17:00:58  profilanswer
 

Taz a écrit :

"Salut.Bah.voilà.skoul"
 
ça fait 23 caractères


Exemple 1: Taz ne sait pas compter [:cupra]  
T'aurais quand même pu tester

>>> len("Salut.Bah.voilà.skoul" )
21


 
Bouuuh  :o
 
edit: et si on ajoute \0 on passe à 22, toujours pas 23 :o

>>> len("Salut.Bah.voilà.skoul\0" )
22


Message édité par masklinn le 16-02-2005 à 17:02:24

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°983755
Tarabiscot​e
Posté le 16-02-2005 à 17:07:00  profilanswer
 

Ben avec les " ca fait 23 :)
 
Autrement sérieusement je trouve 22 en comptant et sizeof("Salut.Bah.voilà.skoul" ) me dit 22 aussi.

n°983756
Taz
bisounours-codeur
Posté le 16-02-2005 à 17:07:07  profilanswer
 

et là je te retombe dessus illico
 
UTF-8 pawa !
les autres codages c'est de la merde :o
 

Code :
  1. echo -n Salut.Bah.voilà.skoul | hexdump -C
  2. 00000000  53 61 6c 75 74 2e 42 61  68 2e 76 6f 69 6c c3 a0  |Salut.Bah.voil..|
  3. 00000010  2e 73 6b 6f 75 6c                                 |.skoul|


 
donc trust no one. Utilise sizeof/strlen et pas tes yeux.

n°983757
Froozen
Posté le 16-02-2005 à 17:07:08  profilanswer
 

Taz a écrit :

"Salut.Bah.voilà.skoul"
 
ça fait 23 caractères


 :sarcastic:

n°983767
Tarabiscot​e
Posté le 16-02-2005 à 17:12:44  profilanswer
 

Et tu crois que c'est en UTF-8 ici ?
 
De toute facon faut utiliser des wchar_t :p

n°983769
Mr Mala
Posté le 16-02-2005 à 17:15:12  profilanswer
 

Taz a écrit :

vas-y compte. et si t'es doué en algèbre, utilise l'opérateur sizeof (et sans parenthèses si possible)


 
[ finalement ça n'a rien à faire ici ! ]


Message édité par Mr Mala le 16-02-2005 à 17:16:35
n°983772
chrisbk
-
Posté le 16-02-2005 à 17:16:19  profilanswer
 

Mr Mala a écrit :

Mais bordel de petite merde prétentieuse !!! JE T'AI AGGRESSE ??? JE M'INTERROGEAIS C'EST TOUT ! ALORS TU ME PARLES SUR UN AUTRE TON QU'A TES PETITS CAMARADES DE JEU ! PUTAIN T'ES INVIVABLE !!!
J'ATTENDAIS UNE EXPLICATION, PAS TES INEVITABLES SARCASMES DE MERDE !!!


 
 
PUISQUE CAI CA JE RENTRE CHEZ MA MERE §§

n°983774
black_lord
Truth speaks from peacefulness
Posté le 16-02-2005 à 17:16:59  profilanswer
 

bonne ambiance [:moule_bite]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°983777
chrisbk
-
Posté le 16-02-2005 à 17:18:22  profilanswer
 

Taz a écrit :

si je te réponds, ça va te paraître évident
 
SPA STANDARD BORDEL :o


 
mais tout le monde s'en bas les burnes des standards, la portabilité c'est un mythe alacon et le type c'est un debutant qui s'en fout surement encore plus que moi :o (c'est dire)

n°983803
Taz
bisounours-codeur
Posté le 16-02-2005 à 17:43:08  profilanswer
 

Tarabiscote a écrit :

Et tu crois que c'est en UTF-8 ici ?
 
De toute facon faut utiliser des wchar_t :p


toi tu ne sais pas ce qu'est l'UTF-8
 

chrisbk a écrit :

mais tout le monde s'en bas les burnes des standards, la portabilité c'est un mythe alacon et le type c'est un debutant qui s'en fout surement encore plus que moi :o (c'est dire)


non spa un mythe à la con, et autant pas se prendre les pieds dans le tapis dès le début. Plus sérieusement, tu prends par exemple un prof de fac, qui connait à peine strlen, alors si tu lui sors un strdup ... déjà il sait pas ce que c'est, et quand il va compilé sur son ouin-ouin, ça pas marcher.
 
glib pawa

n°983805
Taz
bisounours-codeur
Posté le 16-02-2005 à 17:44:06  profilanswer
 

Mr Mala a écrit :

[ finalement ça n'a rien à faire ici ! ]


moi je trouve ça très intéressant comme problème, et c'est même un sacré piège.

n°983807
masklinn
í dag viðrar vel til loftárása
Posté le 16-02-2005 à 17:45:46  profilanswer
 

il parlait de ce qu'il a édité et qui se trouve dans la quote de krissebaika [:petrus75]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°983809
Tarabiscot​e
Posté le 16-02-2005 à 17:52:06  profilanswer
 

Je savait que ca serait mal compris en fait je voulais dire que je préfère utiliser des wchar plutot que l'UTF-8 mais c'est sûr en UTF-8 on fait généralement plus d'éconnomie de caractères.

n°983810
Taz
bisounours-codeur
Posté le 16-02-2005 à 17:52:25  profilanswer
 

je comprends ce qui s'est passé ... c'est moi la petite merde prétentieuse ?

n°983811
Taz
bisounours-codeur
Posté le 16-02-2005 à 17:53:25  profilanswer
 

Tarabiscote a écrit :

Je savait que ca serait mal compris en fait je voulais dire que je préfère utiliser des wchar plutot que l'UTF-8 mais c'est sûr en UTF-8 on fait généralement plus d'éconnomie de caractères.


le problème, c'est pas les wchar_t ou des char. C'est ce qu'utilise ton éditeur, et comment ton compilateur gère les codages de caractères multi-octets.

n°983822
Tarabiscot​e
Posté le 16-02-2005 à 18:03:40  profilanswer
 

Tu veux dire que certains compilateur font de l'UTF-8 avec des wchar_t, je pensait que c'était toujours l'UTF-16 ou 32 qui était utilisé.
 
Sinon je suis d'accord avec les char.

n°983835
masklinn
í dag viðrar vel til loftárása
Posté le 16-02-2005 à 18:09:49  profilanswer
 

Taz a écrit :

je comprends ce qui s'est passé ... c'est moi la petite merde prétentieuse ?


ça me semble évident, et même si c'était écrit sous la colère (raison très probable de l'édit) son coup de gueule n'est pas complètement infondé ;)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°983842
chrisbk
-
Posté le 16-02-2005 à 18:16:45  profilanswer
 

Taz a écrit :

je comprends ce qui s'est passé ... c'est moi la petite merde prétentieuse ?


 
Absolument, il semblerait que tu sois un etron qui, en plus d'etre fumant, soit aussi vantard

n°983849
masklinn
í dag viðrar vel til loftárása
Posté le 16-02-2005 à 18:21:40  profilanswer
 

chrisbk a écrit :

Absolument, il semblerait que tu sois un etron qui, en plus d'etre fumant, soit aussi vantard


et invivable [:aloy]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°983858
Froozen
Posté le 16-02-2005 à 18:30:13  profilanswer
 

Masklinn a écrit :

ça me semble évident, et même si c'était écrit sous la colère (raison très probable de l'édit) son coup de gueule n'est pas complètement infondé ;)


+1 :jap:

n°983861
Taz
bisounours-codeur
Posté le 16-02-2005 à 18:32:31  profilanswer
 

Tarabiscote a écrit :

Tu veux dire que certains compilateur font de l'UTF-8 avec des wchar_t, je pensait que c'était toujours l'UTF-16 ou 32 qui était utilisé.
 
Sinon je suis d'accord avec les char.


non je veux dire que par exemple la glib/GTK+/GNOME utilise l'UTF-8 partout avec des char, ça marche sans problème. Après pour wchar_t, c'est une histoire de compilateur ET bibliothèque. En C++, c'est actuellement très casse gueule par exemple.

n°983862
Taz
bisounours-codeur
Posté le 16-02-2005 à 18:34:14  profilanswer
 

Masklinn a écrit :

et invivable [:aloy]


c'est pas ma faute si aujourd'hui les débutants sont des baltringues

n°983870
masklinn
í dag viðrar vel til loftárása
Posté le 16-02-2005 à 18:38:20  profilanswer
 

Taz a écrit :

c'est pas ma faute si aujourd'hui les débutants sont des baltringues


C'était juste une blague reprenant, de même que le génial krissebaika et afin de rendre hommage à ce méconnu génie, les termes originels de Mr Mala [:aloy]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°983971
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-02-2005 à 20:53:23  profilanswer
 

Tarabiscote a écrit :

Ben avec les " ca fait 23 :)
 
Autrement sérieusement je trouve 22 en comptant et sizeof("Salut.Bah.voilà.skoul" ) me dit 22 aussi.


Normal, sizeof retourne la taille (longueur, + 1 pour le 0)


---------------
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°983979
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-02-2005 à 21:05:19  profilanswer
 

chrisbk a écrit :

mais tout le monde s'en bas les burnes des standards, la portabilité c'est un mythe alacon et le type c'est un debutant qui s'en fout surement encore plus que moi :o (c'est dire)


Pas d'accord. Le langage C est défini par une norme qui représente le 'socle commun' (pour parler branché!). Il est AMA important, surtout quand on débute, de bien comprendre quel est le domaine commun du langage, et quelles sont les extensions.
 
D'autre part, la portabilité n'est pas un mythe. Cette bibliothèque est portable, et c'est du concret.  
 
http://mapage.noos.fr/emdel/clib.htm
 
Elle tourne sur  

  • Intel x86 16-bit mode réel
  • Intel x86 32-bit mode étendu
  • Freescale (ex-Motorola) 68000
  • Freescale PowerPC
  • DSP Texas TMS320C54

et probablement d'autres plateformes, moyennant des adaptations minimes dans la poubelle 'sys.h'
 
Des bibliothèques portables, il en existe pas mal. Les gens qui les écrivement ne s'assoient pas sur les normes... Ils les connaissent, et ils savent comment écrire du code portable...
 
C'est un métier...
 
Ceci dit, évidemment, il est parfois utile d'utiliser des extensions, tout ce que je demande, c'est qu'elles servent à écrire la couche d'adaptation et qu'elles ne soient pas saupoudrées n'importe où dans le code applicatif... Ca s'appelle l'abstraction, et c'est une bonne chose...


Message édité par Emmanuel Delahaye le 16-02-2005 à 22:26:02

---------------
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°984007
manatane
En vous remerciant, bonsoir
Posté le 16-02-2005 à 21:20:59  profilanswer
 

Il me semble qu'en C99 le fait de prefixer ses fonctions de manière réservée (str*, to*...) -entre autre- amène un "comportement indéfini". Je prend le cas du préfixage de noms de fonction parce qu'il est très piègeux. Ca veut dire quoi concrétement "comportement indéfini"?

n°984143
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-02-2005 à 22:24:27  profilanswer
 

manatane a écrit :

Il me semble qu'en C99 le fait de prefixer ses fonctions de manière réservée (str*, to*...) -entre autre- amène un "comportement indéfini".


C'était déjà le cas en C90...

Citation :

Je prend le cas du préfixage de noms de fonction parce qu'il est très piègeux. Ca veut dire quoi concrétement "comportement indéfini"?

Qu'il peut arriver n'importe quoi. C'est un bug grave. La plupart des comportements indéfinis (Undefined Behaviour ou UB) ne sont pas détectable par l'analyse automatique du code. Leur detection reste donc du domaine des experts du C et doit être enseignée très tôt.
 
Les exemples les plus courants:
 

  • débordement de tableau
  • utilisation de gets()
  • utilisation de scanf("%s", tableau_de_char) (idem gets())
  • utilisation d'une variable non initialisée
  • utilisation de fonctions variadics sans prototype
  • types incompatibles
  • utilisation des opérateurs logiques sur un type signé
  • copie mémoire avec recouvrement (memcpy() vs memmove())
  • paramètres d'une fonction hors limites

... les cas sont innombrables.
 
Le C n'est pas un langage de débutant en programmation.


Message édité par Emmanuel Delahaye le 16-02-2005 à 22:26:31

---------------
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°984166
manatane
En vous remerciant, bonsoir
Posté le 16-02-2005 à 22:33:08  profilanswer
 

[:roi]
 
En fait j'ai découvert ce truc de préfixage de fonctions il y a peu de temps, j'ignore si c'est un piège connu ou non (il est mentionné dans C unleashed acheté sur votre conseil, mais pas dans Expert C Programming (j'en suis à peu près sur)) à moins que je sois passé à côté.

n°984178
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-02-2005 à 22:41:35  profilanswer
 

manatane a écrit :


(il est mentionné dans C unleashed acheté sur votre conseil, mais pas dans Expert C Programming (j'en suis à peu près sur))


'C Unleashed' est vraiment la référence ultime en matière de C 'intelligent'. Sa grande force est d'être un livre collégial écrit par les animateurs infatigables et inestimables de news:comp.lang.c et validée par le 'peer review', et non l'oeuvre solitaire d'un auteur obscur, aussi bon soit-il.
 
La FAQ de fclc est du même tonneau.
 
http://www.isty-info.uvsq.fr/~rumeau/fclc/


Message édité par Emmanuel Delahaye le 16-02-2005 à 22:49:19

---------------
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°984200
manatane
En vous remerciant, bonsoir
Posté le 16-02-2005 à 22:57:55  profilanswer
 

Il est excellent en effet, de part les qualités que vous avez énumérez et par la richesse des thèmes abordés (optimisation, algorithmes, speech processing, simulation...). Il est passionnant. C'est probablement le bouquin technique le mieux foutu que j'ai lu (bon en fait je l'ai pas encore fini). Dans une moindre mesure, les bouquins de Stevens sont aussi très bien foutus mais centrés sur Unix et pas très respectueux des standards (bien que Advanced Unix programming permet de mieux les comprendre), exit(0); direct en fin de main par exemple :D

mood
Publicité
Posté le   profilanswer
 


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

  Pouvez-vous me dire ce qui ne va pas ?

 

Sujets relatifs
/!\ HELP /!\........Ca veut dire quoi ???que veut dire "->" à la place du "=" ?
[DELPHI] string et syntaxe : comment "dire" ceci ?Qu'auriez vous à dire sur Macromedia Flash ?
MOI AUSSI J'AI UN TRUC A DIREJ'AI RETROUVÉ CE QUE JE VOULAIS DIRE !
MOI AUSSI J'AI UN TRUC À DIRE ![ADA] Tant pis si l'autre topic est fermé, j'ai un truc à dire
[C]pouvez vous me dire ca correspond a koi Mon site à été hacké! pouvez vous me dire ou est la faille: PHP
Plus de sujets relatifs à : Pouvez-vous me dire ce qui ne va pas ?


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