Partage
  • Partager sur Facebook
  • Partager sur Twitter

compréhension code C

Anonyme
    29 avril 2019 à 20:24:49

    bonjour

    je suis débutante en C .Dans mon exercice td on me demande d'écrire’une fonction qui retourne à chaque invocation une chaıne de caractères différente,par exemple en vue de l’utiliser comme un nom de fichier temporaire.

    MON PROF NOUS A TRANSMIS CE CODE QUE JE COMPRENDS PAS ET J'AIMERAI BIEN LE COMPRENDRE

    #define PREFIX « tmp »
    #define NBCHIFFRES 5
      int i ;
      char * mktmp(void){
      char *nom,*p;
      nom = malloc ((NBCHIFFRES + PREFIXET+1)*sizeof(*nom)) ;
    for(int i = 0 ; i < PREFIXET ; i++){
           *nom = PREFIX[i] ;
           nom++ ;
    }
    for(int i = 0 ; i < NBCHIFFRES ; i++){
           *nom = ‘0’ + x%10 ;
            x/=10 ;
            nom++
    }
     essai ++ ;
    *nom = ‘\0’;
    return p ;
    }

    1/ Je comprends pas la logique en gros

    2/ pourquoi x%10? pour quelle raison?

    3/malloc je sais c'est allocation dynamque pour demander de l'espace mémoire mais je vois pas son utilité dans ce code et dans quel cas je serai l'utiliser .

    MERCI DE ME LIRE

    MERCI DE ME RÉPONDRE

    -
    Edité par Anonyme 29 avril 2019 à 22:29:13

    • Partager sur Facebook
    • Partager sur Twitter
      29 avril 2019 à 21:37:33

      C'est putain de mal indenté !

      1/ il alloue une chaine de taille NBCHIFFRE + PREFIX +1 (car il y a besoin d'un octet de plus pour stocker le \0 terminal)

      le premier for copie le préfix dans la chaine allouée

      le 2e for va copier 5 chiffres depuis x qui est une valeur à 5 chiffres j'imagine

      2/ x%10 : reste de la division de x par 10, en couplant avec x/=10, tu prends les chiffres un par un.

      3/ ben il retourne la chaine allouée, il faudra bien faire free apres.

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        29 avril 2019 à 23:08:30

        Hello,

        Si ce code vient de ton prof, il va devoir retourner lui-même sur les bancs.

        Ligne 18: return p, pourquoi pas, mais p n'est pas initialisé (il faudrait, ligne 6, p=nom=malloc....)

        Ligne 16: essai est inconnu

        -
        Edité par edgarjacobs 29 avril 2019 à 23:15:20

        • 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

          30 avril 2019 à 9:47:33

          Salut,

          edgarjacobs a écrit:

          Si ce code vient de ton prof, il va devoir retourner lui-même sur les bancs.

          Le monde est foutu... :euh:

          la constante PREFIXET n'est pas définie non-plus. Le i global serait plutôt le x qui doit définir la valeur à mettre dans le nom de fichier ?

          Il est plutôt risqué d'avoir une variable i qui se balade dans un programme, i est, par convention, utilisé pour les itérations de boucles (avec les suivantes j, k , l...). Je suis d'ailleurs surpris que sa re-déclaration au sein des boucle ne fasse pas tilter le compilo...

          Sinon un bête sprintf() ferait le boulot sur une ligne :

          sprintf(nom, "%s%d", PREFIX, x);

          Je sais que les exercices sur les bases sont importants, mais bon, connaître les outils existants fait aussi parti du boulot, on apprend à un plombier comment souder proprement, pas à fabriquer un poste à souder. Surtout si le prof ne sait pas lui-même fabriquer proprement ledit poste.

          Bonne continuation.

          -
          Edité par drx 30 avril 2019 à 9:49:19

          • Partager sur Facebook
          • Partager sur Twitter

          Bonhomme !! | Jeu de plateforme : Prototype.

            30 avril 2019 à 10:35:10

            Quand je vois des codes comme ça écrits par des "profs" ça fait vraiment peur.
            • Partager sur Facebook
            • Partager sur Twitter

            compréhension code C

            × 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