Le cned a encore frappé...

BonuxDu13 -  
 BonuxDu13 -
ou du moins je le pense. Voilà un extrait de mon cours, et franchement je trouve nulle part l'expression mise en evidence, et quand j'essaie de la tester, mon compilateur m'insulte ; il me dit que je ne suis pas en train d'utiliser une structure!

"Remplissage d’un tableau dynamique
for(int i=0;i<longueur;i++)
{
pttab[i]=mot[i]; // chaque caractère du mot est inscrit dans le tableau dynamique
}
On utilise une boucle for pour pouvoir accéder à chacune des cases du tableau.
Le seul paramètre que l’on connaisse est l’adresse du pointeur qui n’est autre que l’adresse de base du tableau. Donc la
variable i permettra d’accéder à l’adresse de base pttab augmentée de la valeur de la variable i.
mot.at(i) ; permet d’accéder à chaque caractère de la chaîne de type string."


Configuration: Windows / Firefox 79.0

6 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut BonuxDu13,

    Dans ton extrait de cours, tu postes deux choses :
    • un court code
    • un descriptif explicatif du code


    Voilà le code que tu postes :

    for(int i=0;i<longueur;i++)
    {
        pttab[i]=mot[i]; // chaque caractère du mot est inscrit dans le tableau dynamique
    }
    


    Ce code est du C valide. Bien que les types ne soient pas précisés, on peut supposer avec le contexte qu'en ligne 3
    mot
    est un tableau de
    char
    et que
    pttab
    est une variable pointeur sur
    char
    , pointant vers un espace mémoire alloué d'une taille suffisante, et que longueur est d'un type entier et contient un entier positif prédéterminé correspondant au nombre de
    char
    composant la chaîne y compris le caractère terminateur
    '\0'
    .

    Voilà le descriptif que tu postes censé être associé à ce code :

    On utilise une boucle for pour pouvoir accéder à chacune des cases du tableau.
    Le seul paramètre que l’on connaisse est l’adresse du pointeur qui n’est autre que l’adresse de base du tableau. Donc la
    variable i permettra d’accéder à l’adresse de base pttab augmentée de la valeur de la variable i.
    mot.at(i) ; permet d’accéder à chaque caractère de la chaîne de type string.


    Ce descriptif est effectivement erroné en sa dernière ligne mise en gras car il évoque :
    • mot.at(i)
      qui n'est pas présent dans le code commenté
    • comme tu l'as observé
      mot.at(i)
      n'existe pas en C, mais en C++
    • en il outre il parle d'une chaîne de type
      string
      , ce qui n'existe pas non plus en C, mais en C++


    Il s'agit manifestement d'une coquille dans ton cours, que tu devrais signaler à son concepteur. Les chaînes C n'ont rien à voir avec les chaînes de type
    string
    du C++.

    Par ailleurs, dans le code proposé, on ne sait pas comment a été déterminée la valeur de
    longueur
    . Dès lors, il me semble que le descriptif pourrait indiquer "les deux seuls paramètres que l'on connaisse sont l’adresse du pointeur qui n’est autre que l’adresse de base du tableau, et la longueur de la chaîne y compris le caractère terminateur
    '\0'
    " et probablement alerter l'utilisateur sur la nécessité que l'espace mémoire alloué sur
    pttab
    soit d'une taille suffisante.

    En réalité, pour se passer de ce paramètre, il suffirait que le code teste dans une boucle si le
    char
    copié est
    '\0'
    et si oui, arrête la copie. Cela peut se faire par exemple avec une boucle
    do
    /
    while
    , ou juste
    while
    .

    C'est comme cela que K&R proposent un code d'exemple d'implémentation de
    strcpy()
    dans leur livre de référence.

    Dal
    1
    1. BonuxDu13
       
      Merci Dal! Cest donc bien ce que je pensais, tu me le confirme.
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, qu'exprime le compilateur?
    0
    1. BonuxDu13
       
      il lance un warning car je n'utilise pas une structure. ça c'est sur. Quelqu'un m'a dit que l'expression existe en c++, je penche donc pour une erreur du cours de C. ça serait pas la première fois avec le cned
      0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    mot[i], c'est un tableau

    mot.at[i], c'est une structure mot qui possède un champ at (qui est un tableau) ....

    Elle est déclarée quelque part cette structure ?
    0
    1. BonuxDu13
       
      en fait c'est des parenthèses, pas des crochets dans le cours. Quelqu'un m'a dit que cette formulation existe en c++
      0
  4. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    oui, c'est bizarre ...

    Sinon, on est sur le forum C, pas C++, là ...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BonuxDu13 Messages postés 13 Statut Membre
     
    ben ça tombe bien, moi je connais que le C et pas le c++
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      pourquoi as-tu écrit "Quelqu'un m'a dit que cette formulation existe en c++"?
      ta question est-elle relative au C ou au C++?
      0
      1. BonuxDu13 Messages postés 13 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        ben au C car j'apprend pas encore le c++. Donc je vois pas ce qu'une formulation c++ viendrait faire dans mon cours de C, à moins que les profs du CNED se soient (encore) emmelés les pinceaux
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > BonuxDu13 Messages postés 13 Statut Membre
         
        je remets donc la discussion dans le forum C.
        0
      3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour BonuxDu13,

        Ils se sont surement "emmêlé les pinceaux"

        mot.at(i), ca n'existe pas en C

        C'est surement mot.at[i]

        Ca donnerait ceci (par exemple):
        struct mot
        {
            char at[255];
        } ;
        


        et donc mot.at[i] est le i ème caractère de la chaine at de la structure mot
        0
  7. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Ah, ca a changé, on est dans le forum C++ maintenant ...
    0
    1. BonuxDu13 Messages postés 13 Statut Membre
       
      ah ben tiens oui, je pense bien avoir posté dans le forum C à la base...
      0