Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec le jeu du pendu

Allocation de mémoire pour un tableau de type

    17 juin 2017 à 23:49:46

    int main()
    {
        char motRecherche[] = "ELEMENT";
        char *mot = NULL;
        mot = malloc(strlen(motRecherche) * sizeof(char));
        initialiseChaine(mot, strelen motRecherche);
        printf("%d", mot);
        free(mot);
        return 0; 
    }
    void initialiseChaine(char chaine[], int taille)
    int i;
    for(i = 0; i < taille; i++)
    {
        chaine[i] = '*';
    }


    -
    Edité par NekoHana 18 juin 2017 à 0:12:25

    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2017 à 0:10:54

      le printf n'affiche que 3 '*'
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2017 à 1:20:16

        Bonjour à toi aussi, tu devrais lire les règles du forum.

        Sinon, ton code ne compile pas (donc s’il n’affiche que trois *, on pourrait presque dire que tu devrais être content).

        • int main() n’est pas une forme de main valide, utilise int main(void).
        • Ligne 6 de ton main, c’est quoi le second paramètre que tu envoies à ton fonction.
        • Ligne 7 de ton main tu utilises %d alors que tu veux afficher une chaîne de caractère.
        • Il te manque des accolades là pour ta fonction initialiseChaine (regarde du côté de memset qui peut la remplacer efficacement).
        • Vérifie également le retour de malloc (l’allocation peut très bien échouer).
        • Partager sur Facebook
        • Partager sur Twitter
        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
          18 juin 2017 à 15:57:41

          Hello,

          La taille réservée par le malloc() (dans le cas présent) n'est pas correcte: il manque la place pour le \0, nécessaire lors du printf() pour repérer la fin de la chaine. Et, fatalement, la fonction initialiseChaine() n'est pas correcte.

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            19 juin 2017 à 5:34:20

            yo@n97one

            en fait toutes les fautes que tu as citées viennent du fait que je n'ai pas copié-coller le code, je l'ai retapé parce que le jeu du pendu que je fais est en fait en anglais, j'ai aussi changé la boucle for par une boucle while, et je ne suis pas assez avancé dans le langage C pour connaître la fonction memset

            et ça m'affiche maintenant *3x

            voici le vrai code de mon programme :

            void intializeStr(char string_name[], int string_length)
            {
                int i:
                     while(string_name[i] < string_length && string_name [i] != '\0')
                    {
                        string_name[i] = '*';
                        i ++;
                    }
            }
            
            int main(void)
            {
                int length = 0;
                int size_alloc = 0;
                char secretWord[] = "ELEMENTAL";
                char *hiddenWord;
                printf("Welcome to the hung man game.\n\n");
                length = strlen(secretWord);
                size_alloc = length * sizeof(char);
                hiddenWord = malloc(size_alloc);
                if(hiddenWord == NULL)
                {
                    printf("ERROR ALLOCATION");
                    exit(0);
                }
                initiaizeStr(hiddenWord, size_alloc + 1);
                printf("%s", hiddenWord);
                free(hiddenWord);
                return 0;
            }


            -
            Edité par NekoHana 19 juin 2017 à 5:52:40

            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2017 à 9:49:57

              Toujours pas de correction pour le malloc()....
              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                19 juin 2017 à 12:45:47

                En plus de ce qu’a dit @edgarjacobs, rien ne t’empêche de regarder sur Internet ce que fait la fonction memset et comment l’utiliser. Sinon, size_alloc et length devraient être de signe size_t.

                • Partager sur Facebook
                • Partager sur Twitter
                Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                  19 juin 2017 à 14:59:14

                  Et tu as une erreur dans la condition de ton while.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juin 2017 à 18:08:42

                    @yo@n97one comment je suis  censé déclarer une variable de type size_t

                    size_t size_allooc = 0;

                    comme ça par exemple?

                    @thetui est-ce que tu parles du fait que j'ai écrit

                    string_name[i] < string_length
                    

                    au lieu de 

                    i < string_length



                     

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juin 2017 à 20:37:39

                      NekoHana a écrit:

                      @yo@n97one comment je suis  censé déclarer une variable de type size_t

                      size_t size_allooc = 0;

                      comme ça par exemple?

                      Oui, par exemple.

                      NekoHana a écrit:

                      @thetui est-ce que tu parles du fait que j'ai écrit

                      string_name[i] < string_length

                      Dans cette fonction, tu initialises string_name. Tu ne sais donc pas ce que contient string_name[i]. Tu compares donc de l'inconnu avec string_length -- test qui, même si le contenu de string_name était connu, est aberrant dans ce contexte. Ceci est également valable (évidemment) pour la comparaison avec !='\0'. La piste i<string_length est bonne, tente-la.

                      EDIT (éditeur de m....): as-tu corrigé le malloc() ? Tant que cela n'est pas réglé, tu auras des ennuis....

                      -
                      Edité par edgarjacobs 19 juin 2017 à 20:42:05

                      • Partager sur Facebook
                      • Partager sur Twitter

                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                        19 juin 2017 à 23:53:29

                        Et comment je corrige le malloc parce que je ne vois pas où est la faute

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 juin 2017 à 0:11:13

                          Il te faut la place pour le 0 final, donc il te faut allouer une taille length + 1.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                            20 juin 2017 à 5:52:14

                            J'ai réécrit un code pour tester l'allocation dynamique pour faire une chaîne de caractères mais ça marche toujours pas (j'ai créé un autre programme)

                            Voilà ce que j'obtiens:

                            ╚#ó

                            ********ROWSER_AIÎ┘J6X

                            Et voici le code tel qu'il est dans le programme :

                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <string.h>
                            
                            int main(void)
                            {
                                size_t letter_size = 9;
                                char *letter = NULL;
                            
                                letter = malloc(letter_size);
                                if(letter == NULL)
                                {
                                    printf("ERROR ALLOCATION");
                                    exit(0);
                                }
                                printf("%s \n", letter);
                                memset(letter, '*', letter_size - 1);
                                printf("%s", letter);
                                free(letter);
                            
                                return 0;
                            }
                            

                            P.S : même si je remplace (letter_size - 1) dans le memset par (letter_size) ce que j'obtiens c'est ça : 

                            ╚#ó

                            *********OWSER_AIÎ┘J6X



                            -
                            Edité par NekoHana 20 juin 2017 à 5:54:39

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 juin 2017 à 6:31:52

                              À quel moment tu places le caractère de code nul ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 juin 2017 à 6:07:25

                                Merci beaucoup les gars, mon code marche enfin grâce à vous. 

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Problème avec le jeu du pendu

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown