Pouvez-vous me dire ce qui ne va pas ?

Pouvez-vous me dire ce qui ne va pas ? - C - Programmation

Marsh Posté le 16-02-2005 à 16:19:49    

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.

Reply

Marsh Posté le 16-02-2005 à 16:19:49   

Reply

Marsh Posté le 16-02-2005 à 16:22:20    

la ligne 13 est completement fausse :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 16-02-2005 à 16:23:32    

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


 
C'est mieux ? :)

Reply

Marsh Posté le 16-02-2005 à 16:24:28    

oui !


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 16-02-2005 à 16:41:38    

Merci :D

Reply

Marsh Posté le 16-02-2005 à 16:42:40    

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

Reply

Marsh Posté le 16-02-2005 à 16:51:14    

#         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.

Reply

Marsh Posté le 16-02-2005 à 16:54:56    

Taz a écrit :

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


 
heuuuuuuuuuuuuu :heink:

Reply

Marsh Posté le 16-02-2005 à 16:58:16    

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

Reply

Marsh Posté le 16-02-2005 à 16:59:07    

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)

Reply

Marsh Posté le 16-02-2005 à 16:59:07   

Reply

Marsh Posté le 16-02-2005 à 17:00:58    

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?
Reply

Marsh Posté le 16-02-2005 à 17:07:00    

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

Reply

Marsh Posté le 16-02-2005 à 17:07:07    

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.

Reply

Marsh Posté le 16-02-2005 à 17:07:08    

Taz a écrit :

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


 :sarcastic:

Reply

Marsh Posté le 16-02-2005 à 17:12:44    

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

Reply

Marsh Posté le 16-02-2005 à 17:15:12    

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
Reply

Marsh Posté le 16-02-2005 à 17:16:19    

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 §§

Reply

Marsh Posté le 16-02-2005 à 17:16:59    

bonne ambiance [:moule_bite]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 16-02-2005 à 17:18:22    

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)

Reply

Marsh Posté le 16-02-2005 à 17:43:08    

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

Reply

Marsh Posté le 16-02-2005 à 17:44:06    

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.

Reply

Marsh Posté le 16-02-2005 à 17:45:46    

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?
Reply

Marsh Posté le 16-02-2005 à 17:52:06    

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.

Reply

Marsh Posté le 16-02-2005 à 17:52:25    

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

Reply

Marsh Posté le 16-02-2005 à 17:53:25    

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.

Reply

Marsh Posté le 16-02-2005 à 18:03:40    

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.

Reply

Marsh Posté le 16-02-2005 à 18:09:49    

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?
Reply

Marsh Posté le 16-02-2005 à 18:16:45    

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

Reply

Marsh Posté le 16-02-2005 à 18:21:40    

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?
Reply

Marsh Posté le 16-02-2005 à 18:30:13    

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:

Reply

Marsh Posté le 16-02-2005 à 18:32:31    

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.

Reply

Marsh Posté le 16-02-2005 à 18:34:14    

Masklinn a écrit :

et invivable [:aloy]


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

Reply

Marsh Posté le 16-02-2005 à 18:38:20    

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?
Reply

Marsh Posté le 16-02-2005 à 20:53:23    

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/
Reply

Marsh Posté le 16-02-2005 à 21:05:19    

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/
Reply

Marsh Posté le 16-02-2005 à 21:20:59    

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"?

Reply

Marsh Posté le 16-02-2005 à 22:24:27    

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/
Reply

Marsh Posté le 16-02-2005 à 22:33:08    

[: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é.

Reply

Marsh Posté le 16-02-2005 à 22:41:35    

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/
Reply

Marsh Posté le 16-02-2005 à 22:57:55    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed