IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec la fonction strchr


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Par défaut Problème avec la fonction strchr
    j'ai un tit problème avec la fonction strchr de C.
    Voici le proto de cette fonction :

    char *strchr(char *str, int ch);

    Je ne comprends pas pourquoi le caractère que l'on recherche est un entier . J'ai compris comment retrouver la position du caractère recherché, mais le fait que celui-ci doit être un entier m'échappe...

    Imaginons la chaine suivante : "j'adore _ comme caractère!".
    je veux chercher la position du "_". Comment fais-je ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h> 
    #include <string.h> 
    void main() 
    { 
              char *pLoc; 
              char *pChaineQuelconque = "j'adore _ comme caractère"; 
     
              pLoc = strchr(pChaineQuelconque, ???); 
     
              printf("la position de _ est : %d", pLoc-pChaineQuelconque); 
    }
    Si quelqu'un a des explications, moi je nage là . Que dois-je mettre comme second paramètre à strchr ?

    Bahan

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par Bahan
    Je ne comprends pas pourquoi le caractère que l'on recherche est un entier .
    Le type d'un caractère

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h> 
    #include <string.h> 
    void main() 
    { 
              char *pLoc; 
              char *pChaineQuelconque = "j'adore _ comme caractère"; 
     
              pLoc = strchr(pChaineQuelconque, '_'); 
     
              printf("la position de _ est : %d", pLoc-pChaineQuelconque); 
    }

  3. #3
    Membre confirmé Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <string.h>
    void main()
    {
            char *pLoc;
            char *pChaineQuelconque = "j'adore _ comme caractère";
            pLoc = strChr(pChaineQuelconque, '_');
            printf("la position de _ est : %d", pLoc-pChaineQuelconque);
    }
    Et j'ai l'erreur suivante en compilant avec xlc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "test2.c", line 9.14: 1506-068 (S) Operation between types "char*" and 
    "int" is not allowed.
    Autant pour moi. J'appelais strChr au lieu de strchr. Quel boulet...

    Bahan

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gege2061
    Ce qui donne :
    Eeek ! C'est quoi ce void main() ?

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Eeek ! C'est quoi ce void main() ?
    Pas taper j'ai pas regardé le code, j'ai juste remplacé les points d'interrogation

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Bahan
    j'ai un tit problème avec la fonction strchr de C.
    Voici le proto de cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *strchr(char *str, int ch);
    Je ne comprends pas pourquoi le caractère que l'on recherche est un entier . J'ai compris comment retrouver la position du caractère recherché, mais le fait que celui-ci doit être un entier m'échappe...
    En C, une constante caractère est un entier. Une des raisons est que dans le contexte "paramètre ou retour de fonction" tout type entier de taille inférieur à un int est 'promu' en int.

  7. #7
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    En C, une constante caractère est un entier. Une des raisons est que dans le contexte "paramètre ou retour de fonction" tout type entier de taille inférieur à un int est 'promu' en int.
    Oui, comme fgetc() qui retourne le caractere lu ou EOF qui doit valoir une valeur en dehors de la brochette de valeurs d'un char.
    Il ya aussi le fait d'accepter les caracteres superieurs à 127 (meme si il suffirait d'utiliser un unsigned char).
    Ca m'est arrivé de mettre un caracetere dans un int apres l'avoir casté en unsigned char, pour pouvoir faire ce genre de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int c;
    /* .. */
    c = (unsigned char) str[i];
    /* ... */
    if (c >= 128)
    /* ... */
    man fputc() parle de cette conversion en unsigned char
    http://man.developpez.com/man3/fputc.3.php

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  3. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo