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 :

strupr


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut strupr
    Bonjour

    Je viens de récupérer http://pocket.free.fr/download/wav2bin.zip sur http://pocket.free.fr/html/soft/soft_f.html#
    J'essaie de le compiler sous Linux avec gcc et je tombe sur l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /home/bs/tmp/ccFaKabU.o: In function `main':wav2bin.c:(.text+0x29bc): undefined reference to `strupr'
    :wav2bin.c:(.text+0x2ac1): undefined reference to `strupr'
    :wav2bin.c:(.text+0x2bed): undefined reference to `strupr'
    :wav2bin.c:(.text+0x2cec): undefined reference to `strupr'
    Voici le code incriminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            (void) strupr (argS[1]) ;
    C'est quoi ça ?

    nb : il existe aussi une version MAC osX. Est-ce que je ne ferais pas mieux de prendre cette version ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    C'est une fonction non-standard qui passe une chaine de caractere en majuscules. Ca se re-code en 30 secondes...

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    toupper et tolower est-ce standard ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void strupr(char * chaine)
    {
     while(*chaine)
     {
      if (*chaine<='z' && *chaine>='a') *chaine+='A'-'a';
      chaine++;
     }
    }
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/toupper.3.html

    Oui c'est ANSI

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Fait attention, la fonction strupr a pour prototype (d'après Google):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *strupr(char *s1);
    Elle modifie s1 et renvoie cette adresse.
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <ctype.h>
     
    char *strupr(char *s1)
    {
       char *p = s1;
       while(*p)
       {
           toupper(*p);
           p++;
       }
       return s1;
    }

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Si c n'est ni un caractère non-signé, ni EOF, le comportement de ces fonctions est imprévisible.
    Ceci me fait un peu peur... Je n'ai pas encore testé le programme ! Et j'ai peur que je veuille déjà l'utiliser en dehors du cadre prévu !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par DaZumba
    Fait attention, la fonction strupr a pour prototype (d'après Google):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *strupr(char *s1);
    Pourtant elle est utilisée comme ça par le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void) strupr (argS[1]) ;
    Il y a un problème dans l'air !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par troumad
    Pourtant elle est utilisée comme ça par le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (void) strupr (argS[1]) ;
    Il y a un problème dans l'air !
    Non, c'est normal. En mettant (void) devant la fonction, le programmeur signale au compilateur qu'il sait que la fonction renvoie quelque chose mais qu'il a décidé d'ignorer cette valeur (certains paranos mettent cela devant printf()!). C'est un style de codage.

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    OK !
    Donc, la procédure modifie la chaîne et renvoie l'adresse qu'on lui a donnée... Intérêt de ce renvoi ?
    Autant renvoyer 0 ou 1 (en int ou char) pour indiquer le bon ou mauvais fonctionnement de la procédure !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  10. #10
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par troumad
    Donc, la procédure modifie la chaîne et renvoie l'adresse qu'on lui a donnée... Intérêt de ce renvoi ?
    Renvoyer l'adresse de l'argument est pratique pour enchaîner les appels sans variable intermédiaire explicite. Du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s\n", strupr(s));
    Ce n'est pas très propre, mais c'est utilisé souvent.

  11. #11
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    OK !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

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

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