Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonctions de manipulation de chaînes

    21 février 2024 à 18:22:51

    int main(int argc, char *argv[])
    
    {
    
    char chaine[] = "Texte de test", *suiteChaine = NULL;
    
    suiteChaine = strchr(chaine, 'd');
    
    if (suiteChaine != NULL) // Si on a trouvé quelque chose
    
    {
    
    printf("Voici la fin de la chaine a partir du premier d : %s",
    
    , suiteChaine);
    
    }
    
    return 0;
    
    }


    Bonjour ! 

    J'ai commencé à apprendre le langage c du cours proposé par OpenClassrooms , je suis arrivé au niveau des chaînes de caractères mais j'ai un petit soucis de compréhension sur la fonction strchr (rechercher un caractère)

    Le prototype de la fonction est : char* strchr(const char* chaine, int caractereARechercher);

    On n'a dit que " la fonction renvoie un pointeur vers le premier caractère qu'elle a trouvé, c'est-à-dire

    qu'elle renvoie l'adresse de ce caractère dans la mémoire."  J'ai pas compris ce qu'on a voulu dire par là ! Pouvez vous m'éclaircir s'il vous plaît 

    Par la suite on a créé un pointeur dans la fonction main () qui va stocker le résultat de la fonction strchr mais ce que je comprends pas comment ça se fait qu'à l'intérieur de ce pointeur il y'a une chaîne et non qu'un caractère ? Merci d'avance ! 

    Voici le programme :

    int main(int argc, char *argv[])

    {

    char chaine[] = "Texte de test", *suiteChaine = NULL;

    suiteChaine = strchr(chaine, 'd');

    if (suiteChaine != NULL) // Si on a trouvé quelque chose

    {

    printf("Voici la fin de la chaine a partir du premier d : %s",

    , suiteChaine);

    }

    return 0;

    }

    -
    Edité par Ναθαναήλ 16 mars 2024 à 10:20:02

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2024 à 19:04:45

      Bonjour, Merci de lire les règles du forum AVANT de créer un sujet.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code </>

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton  </> de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2024 à 20:18:33

        FranciiisNathanael a écrit:

        On n'a dit que " la fonction renvoie un pointeur vers le premier caractère qu'elle a trouvé, c'est-à-dire qu'elle renvoie l'adresse de ce caractère dans la mémoire."  J'ai pas compris ce qu'on a voulu dire par là ! Pouvez vous m'éclaircir s'il vous plaît.

        Pour faire simple, on va dire que la mémoire est une suite de cases. Chaque case à une adresse qui la référence. 

        Le pointeur est une variable censé recevoir une adresse (et rien d'autre), il est donc adapté pour recevoir l'adresse du caractère renvoyé par la fonction.

        FranciiisNathanael a écrit:

        Par la suite on a créé un pointeur dans la fonction main () qui va stocker le résultat de la fonction strchr mais ce que je comprends pas comment ça se fait qu'à l'intérieur de ce pointeur il y'a une chaîne et non qu'un caractère ? 

        Comme je t'ai dit plus haut, il ne peut pas y avoir un caractère (ni une chaîne) dans un pointeur mais seulement une adresse. Ici c'est l'adresse du caractère 'd' de la chaîne de caractère qui est renvoyé par la fonction.

        Une chaîne de caractère, c'est un tableau de caractère un peu particulier, puisque la chaîne se termine par le caractère '\0'.  Ton pointeur pointant sur le caractère 'd' de la chaîne, si tu l'utilise (le pointeur) comme une chaîne de caractère, il va la faire commencer à partir du 'd' jusqu'au '\0' 

        La seule façon d'envoyer une chaîne de caractère en argument à une fonction est de lui envoyer l'adresse de son premier caractère. 


        PS : Ton titre n'est pas adapté, Pointeur de fonction a une autre signification.


        -
        Edité par rouIoude 21 février 2024 à 20:30:30

        • Partager sur Facebook
        • Partager sur Twitter
        ...
          21 février 2024 à 20:26:09

          Hello,

          En fait, en C, les chaines de caractères ne sont qu'une suite d'octets en mémoire, terminées par un caractère spécial: le '\0' (=une valeur sentinelle).

          Ton pointeur, lui, il pointe bien sur 1 caractère (=une adresse en mémoire). Tout dépend maintenant de ce qu'on veut afficher:

          #include <stdio.h>
          #include <string.h>
          
          int main(void) {
              char str[]="Hello world";
              char *ptr=strchr(str, 'w');
              if(ptr != NULL) {
                  printf("%c\n",*ptr);    // affiche le caractère w
                  printf("%s\n",ptr);     // affiche la chaine de caractères world
                  *ptr='c';
                  printf("%s\n",ptr);     // affiche la chaine de caractères corld
          
              }
              else
                  puts("w pas trouvé");
          
              return(0);
          }



          -
          Edité par edgarjacobs 29 février 2024 à 19:12:32

          • 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

          Fonctions de manipulation de chaînes

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown