CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Debutant en c

inight
inight
Niveau 9
02 juillet 2014 à 23:47:12

:salut:

J'essaye de revoir le c que j'avais un peu débuté, je fais le guide du sdz et j'essaye de créer un pendu
J'ai un probleme que je ne comprends pas avec l'affichage, suivant la longeur, le terminal m'affiche en plus des caractères étranges

Voici le code il est tout bete mais bon : http://pastebin.com/gMEtB5h0

Merci d'avance

BuretteGraduee
BuretteGraduee
Niveau 10
02 juillet 2014 à 23:57:57

Personnellement je comprend pas cette ligne
motChiffre = (char *)malloc(taille * sizeof(char));
malloc() renvoie déjà un pointeur tu n'as pas besoin de le caster.

Essaye
motChiffre = malloc(taille * sizeof(char));

Ensuite vire moi cette fonction Afficher, ca n'a aucun sens, la fonction printf est déjà assez "petite", c'est une perte de temps et de place(et aussi source de problème) de multiplier les fonctions.

BuretteGraduee
BuretteGraduee
Niveau 10
03 juillet 2014 à 00:01:34

Et je rajouterai que tu devrais tout mettre dans la fonction main, car cette fonction initialisatio() contient tout donc elle est inutile.
Et ensuite, tu crée une variable taille, que tu n'utilise pas dans la boucle for juste en dessous.

inight
inight
Niveau 9
03 juillet 2014 à 00:14:11

Pour le "motChiffre = (char *)malloc(taille * sizeof(char)); ", c'est que je voulais essayer avec et sans le cast, j'avoue que je ne l'ai pas encore compris comme j'ai vu les 2 mais il ne change rien au problème

La fonction afficher avec ou sans le problème est le meme, je l'avais créée pour la suite et ajouter des choses à l'affichage

Le fait que initialisation contienne tout c'est tout simplement que je préfère appeler les fonctions dans le main et mettre le code dedans, mais ça ne change rien non plus

La taille oui c'est vrai, je l'utilise pour le malloc mais je n'ai pas pensé à la réutiliser ou lieu de recalculer la taille avec le strlen

Mais tout ça reste mineur comme changement, c'est plus propre mais ça ne change rien à ce problème de caractères étranges en plus lors de l'affichage du mot chiffré :(

BuretteGraduee
BuretteGraduee
Niveau 10
03 juillet 2014 à 00:41:57

Si pour le malloc ca change forcement vire le :ok:
Ensuite ton scanf n'est pas bon non plus
C'est de la form scanf("%c", &c)
Et getChar() je vois pas à quoi ca correspond et à quoi ca sert

inight
inight
Niveau 9
03 juillet 2014 à 00:56:28

Comme j'ai précisé j'ai changé le malloc et ça n'a pas modifié mon problème

Ce scanf c'était une solution que j'avais trouvée pour éviter que ça ne me saute la saisie qui suit (le fgets dans mon code).
Je dis peut-etre des betises mais je crois qu'il "absorbe" le caractère dans le buffer (le "/n" dans mon cas) mais je me suis pas trop attardé dessus vu que ça marche très bien avec

le getchar c'est simplement pour quand dans le cas du pendu, le jeu ne s'arrete que lorsque l'utilisateur saisie le "n" à la fin, sinon ça relance une partie.
Je n'ai simplement pas rajouté de "continuer ?" dans ma boucle.

Tout ça ne change pas grand chose à mon problème

BuretteGraduee
BuretteGraduee
Niveau 10
03 juillet 2014 à 01:33:57

Personnellement j'ai jamais vu cette forme, et il faut que forcement ton scanf, envoit ce que tu as rentré vers une adresse.
J'essaierai ton code demain :ok:

Somnides
Somnides
Niveau 6
03 juillet 2014 à 02:49:33

Il faut malloc ton char* motChiffre de (taille + 1), et ajouter le \0 en fin de chaîne.
Tu peux conserver le cast lors du malloc, qui renvoi d'ailleurs un void* (même si, parait-il, c'est déconseillé). Ajoute également un \n sur ton printf ligne 31 (et supprime donc la ligne 24).

inight
inight
Niveau 9
03 juillet 2014 à 10:51:59

C'était bien le '\0' que j'avais oublié comme un idiot, j'y avais pensé au dernier moment en eteignant l'ordinateur hier soir mais il se faisait tard

En tout cas merci à vous :)

dark_drow
dark_drow
Niveau 15
03 juillet 2014 à 14:34:33

en C++ le cast est obligatoire mais pas en C.
C'est pas une faute de le mettre mais c'est "good practice" de ne pas le mettre en C :)

inight
inight
Niveau 9
05 juillet 2014 à 14:53:23

Et comme vous parliez des malloc, je voulais savoir quand les utiliser ?

Car en faisant les listes chainées, j'ai vu plusieurs malloc écrit mais j'ai l'impression que c'est la meme chose sans

J'ai fait un petit test avec un int + une structure, et avec ou sans le malloc le test affiche la meme chose : http://pastebin.com/44U0s8eC

inight
inight
Niveau 9
05 juillet 2014 à 19:06:26

D'ailleurs pour les tableaux, je peux egalement placer plus de caractères que ce que j'ai déclaré avec le malloc

http://pastebin.com/ArYa6m0x

En déclarant un tableau avec tab = malloc (2 * sizeof(char)); je peux quand meme placer bien plus de 2 caractères, c'est normal ?

ranarama
ranarama
Niveau 7
05 juillet 2014 à 19:34:18

:g) Et comme vous parliez des malloc, je voulais savoir quand les utiliser ?

ben moi j'utilise ça quand la taille des données est variable et/ou inconnu au moment ou j’écris le programme.
par ex : lecture de la taille d'un fichier PUIS malloc(tailledufichier) PUIS copie de celui-ci vers cette mémoire réservée.

Dans le cas du pendu, je pense pas qu'un malloc soit utile, la taille maxi d'un mot c'est 25 caractères ("anticonstitutionnellement" lol), donc tu utilises un tableau de 26 chars (25 + /0) et voilà !

inight
inight
Niveau 9
06 juillet 2014 à 11:32:26

Ok merci :)

LEpigeon-888
LEpigeon-888
Niveau 12
06 juillet 2014 à 16:40:32

Pour ta 1er question, t'as visiblement pas compris ce qu'était un pointeur, t'alloue de la mémoire pour créer une variable, si tu pointe sur un objet qui existe déjà t'as rien besoin d'allouer :non:

Pour ton deuxième, le fonctionnement est aléatoire, t'essaye d'accéder à de l'espace non alloué par ton programme, je crois que si il est utilisé par un autre programme ça plantera avec un segmentation fault, sinon ça te dira rien. Mais il me semble que si tu lance le truc avec GDB ça va planter :oui:

LEpigeon-888
LEpigeon-888
Niveau 12
06 juillet 2014 à 16:41:26

Aussi au passage, la prochaine fois que tu post un truc sur pastbin active la colloration syntaxique, c'est bien chiant pour lire sinon :(

DirectX11
DirectX11
Niveau 6
06 juillet 2014 à 16:45:27

non non et non ! on ne peu pas accéder à la mémoire d'un autre programme :diable:
il faut arrêter de rependre cette fausse informations sur le segfault

LEpigeon-888
LEpigeon-888
Niveau 12
06 juillet 2014 à 16:48:32

"on ne peu pas accéder à la mémoire d'un autre programme :diable: "

Bah c'est ce que j'ai dis :(

LEpigeon-888
LEpigeon-888
Niveau 12
06 juillet 2014 à 16:52:33

Ah non je pense avoir mal compris ton truc, mais comme dit dans mon message j'en sais pas grand chose et vu que personne répondait à son topic je me suis dit que j'allais répondre :oui:

DirectX11
DirectX11
Niveau 6
06 juillet 2014 à 16:56:59

Oui je disais juste que si tu sort d'un tableau par exemple. oui ça va segfault. mais pas parce que l'adresse est utilisé dans un autre programme. c'est impossible. un programme ne peu pas accéder comme ça à la mémoire d'un autre programme. (sauf cas bien spécifique des shared memory)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment