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 :

Chaîne de caractères


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut Chaîne de caractères
    Bonjour,
    voilà je ne comprend pas pourquoi j'ai cette erreur : "exo8.c:7: attention : incompatible implicit declaration of built-in function «strlen""
    Le but de mon exercice est de vérifier si un mot est un palindrome (mot qui peut se lire de gauche à droite et vice-et-versa) renvoie 1 si oui et 0 si non.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include<stdio.h>
    #include<stdlib.h>
    
    int palindrome(char *mot){
      int i,res;
      res=1;
      for(i=0;i<=(int)((strlen(mot)-1)/2);i++){
        if(mot[i]!=mot[strlen(mot)-i-1])res=0;
      }
      return res;
    }
    
    int main(void){
      char mot[50];
      printf("saisir un mot:");
      scanf("%s",mot);
      printf("résultat:%d\n",palindrome(mot));
      return 0;
    }
    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    voilà je ne comprend pas pourquoi j'ai cette erreur : "exo8.c:7: attention : incompatible implicit declaration of built-in function «strlen""
    Le prototype de la fonction strlen est inconnu. Il faut inclure string.h où se trouve sa déclaration.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    Ha ok merci, je confond avec stdlib.h

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void){
      char *mot;
      printf("saisir un mot:");
      scanf("%s",mot);
    ....
    est erroné : il faut un TABLEAU pour stocker le mot lu sur le clavier. Ici mot est un pointeur (un truc pour stocker une adresse) pas un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char mot[une valeur suffisante] ;
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    Oui merci, je l'est vu imédiatement en testant. (petit core dumped )

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    Autre petite question:
    est-ce possible d'initialiser un tableau de 10 entier seulement avec des pointeurs et sans allocation dynamique de la mémoire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    include<stdio.h>
    int main(){
      int i; /*je sais pas comment déclarer la variable x sans faire x[10]*/
      for(i=0;i<=9;i++)
        *(x+i)=0;
      return 0;
    }
    Merci d'avance pour votre aide.

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int i; /*je sais pas comment déclarer la variable x sans faire x[10]*/
    Moi non plus. La seule autre alternative est l'allocation dynamique (malloc), mais est-ce justifié ?
    s'écrit de façon plus claire comme
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Delnir Voir le message
    Bonjour,
    voilà je ne comprend pas pourquoi j'ai cette erreur : "exo8.c:7: attention : incompatible implicit declaration of built-in function «strlen""
    Le but de mon exercice est de vérifier si un mot est un palindrome (mot qui peut se lire de gauche à droite et vice-et-versa) renvoie 1 si oui et 0 si non.
    Le comportement est indéfini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `palindrome':
    C:\dev\hello\main.c:4: warning: implicit declaration of function `strlen'
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:12: warning: implicit declaration of function `printf'
    C:\dev\hello\main.c:13: warning: implicit declaration of function `scanf'
    Output size is 18.26 KB
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 3 warnings
    Il faut inclure <string.h> et <stdio.h>

    L'algo est correct, mais un peu trop compliqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    FUNCTION is_palindrome (s:STRING) : BOOL
    BEGIN
     pal := TRUE
     i := 0
     j := s.length() - 1
     
     WHILE pal AND i < j
      pal := s[i] == s[j]
      INC i
      DEC j
     END WHILE
     
     RETURN pal
    END
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Delnir Voir le message
    est-ce possible d'initialiser un tableau de 10 entier seulement avec des pointeurs et sans allocation dynamique de la mémoire?
    Non. Qu'est-ce qui ne va pas avec un tableau ? Par contre, on peut définir un pointeur sur un élément du tableau...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int tab[] = {0,0,0,0,0,0,0,0,0,0};
    int *pa = tab + 0; /* ou tab */
    int *pb = tab + 3;
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    C'est le but de l'exercice, je me posai juste la question, est ce faisable sans allocation dynamique de la mémoire mais j'ai la réponse (c'est à dire non) merci.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu voulais dire "est-il possible de faire sans malloc() un tableau dont la taille n'est pas connue à la compilation ?" ?

    Eh bien, c'est possible seulement en C99, avec les Variable Length Arrays. Ou bien, avec certaines extensions sur certains environnements, comme la fonction alloca() qui alloue sur la pile.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    ok merci.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  3. Chaînes de caractères
    Par Zazeglu dans le forum C
    Réponses: 3
    Dernier message: 28/08/2003, 16h20
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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