compilation 32/64 bits - C - Programmation
Marsh Posté le 07-05-2009 à 19:18:49
Ta ligne 14 est fausse :
Code :
|
Ton sizeof mesure la taille de ta variable, qui est un pointeur. Taille qui dépend donc de l'archie 32 ou 64bits.
La taille de ton buffer est de 256, ton écrit simplement :
Code :
|
(idéalement avec un #define ça serait mieux).
Marsh Posté le 07-05-2009 à 19:28:20
Merci tpierron pour cette réponse précise et rapide.
Si j'ai bien compris, j'ai tout intérêt à définir une taille fixe. Cela me permettra en outre d'assurer une compatibilité avec les 2 environnements. (?)
Pourquoi ai-je ce message d'alerte sous 64 et pas sur 32 ?
attention : format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’ sur la ligne 14 ?
Marsh Posté le 07-05-2009 à 20:03:22
Franchement tu te prends sans doute la tête pour rien avec ton code. Je ferais un truc du genre :
Code :
|
Sinon ton warning vient du fait que sizeof() renvoit un type size_t qui devrait être affiché avec un format %z si ma mémoire est bonne. Ah ouais, c'est une extension C99, je parie que ça ne fonctionnera pas avec la mscvrt.
Marsh Posté le 08-05-2009 à 18:21:35
Merci bien pour ce complément d'infos mais j'ai le même soucis avec ce code :
Code :
|
Sous l'architecture 64, ma sortie est :
Number 479
Number 665
Number 154
Number 269
Number 501
Sous l'architecture 32, ma sortie est :
Number 479
Je ne comprends pas.
Marsh Posté le 08-05-2009 à 19:25:24
Ton problème ici est un problème d'ordonancement, indépendant d'une architecture 32 ou 64bits.
Quand tu écris quelque chose dans un pipe, tu n'as aucunne garantie que tu vas lire la même quantité à l'autre bout.
Affiche la valeur de nread, une coïncidence fait que sur l'archi 32bits tu recoies les 5 write d'un coup, et sur le 64bits, tu les recoies un à un.
Marsh Posté le 08-05-2009 à 20:22:18
Merci encore tpierron pour cette analyse.
nread = 4 sous 64 bits
nread = 20 sous 32 bits
Quand j'ai dit cela, j'ai tout dit !!
Mon objectif est de passer dans le tube une multiple de nombres choisis de façon aléatoire.
Marsh Posté le 07-05-2009 à 19:13:56
Bonjour,
J'ai une sortie différente selon que je compile sous environnement 32 bits ou sous environnement 64 bits.
Soit la fonction suivante :
Le fichier créé porte le nom G500. J'y inscrit le numéro du PID et un numéro d'équipe.
Sous 32 bits, la sortie est la suivante :
PID :7931 Equipe :22
Buffer : 7931 Sizeofbuffer : 5
Ecriture réussie sur le fichier /tmp/G500
$ cat /tmp/F0678
7931ubuntu@ubuntu~/Projet$
La compilation se passe sans erreur mais la taille du buffer ne permet pas d'écrire les 2 données. Seule la taille du PID est inscrite dans le fichier.
Sous 64 bits, la sortie est la suivante :
Buffer : 19624
22 Sizeofbuffer : 9
Ecriture réussie sur le fichier /tmp/F0255$ cat /tmp/F0255
19624
22ubuntu@ubuntu~/Projet$
La compilation génère cette erreur sur la ligne : snprintf (buffer...
attention : format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’
Merci pour vos contributions et votre regard éclairé.
Message édité par sneakz le 07-05-2009 à 19:15:14