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 appel str_sub : type de retour


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Problème appel str_sub : type de retour
    Bonjour à tous,

    Je souhaite utiliser la fonction str_sub décrite ici http://nicolasj.developpez.com/articles/libc/string/
    char *str_sub (const char *s, unsigned int start, unsigned int end)


    Pour cela, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char * var= NULL;
    var = str_sub("chaine", 3, 5);
    Malheureusement, cela ne compile pas, et me donne l'erreur suivante :
    Erreur 12 error C2040: 'str_sub' : 'char *(const char *,unsigned int,unsigned int)' differs in levels of indirection from 'int ()'
    Le plus étrange, c'est que si je créée une fonction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int test(const char *s, unsigned int start, unsigned int end)
    {
    	return 42;
    }
    et que je l'appelle comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * var= NULL;
    var = test("chaine", 3, 5);
    Cela compile, comme si ma variable var était un int!

    En revanche, si j'essaye d'appeler strstr, censée retouner un char *, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char * var= NULL;
    var = strstr("chaine","ai");
    Cela compile également!

    Où est mon erreur dans l'appel de str_sub?

    Merci par avance

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    La fonction str_sub est-elle déclaré (ou définie) avant que tu n'y fasse appel ?

    Si tu as un seul fichier :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #include <stdio.h>
    #include <stdlib.h>
     
    /* déclaration de sub_str */
    char *str_sub (const char *s, unsigned int start, unsigned int end);
     
    /* fonction main qui utilise sub_str */
    int main(void) 
    {
        char * var= NULL;
        var = str_sub("chaine", 3, 5);
        if(NULL != var) {
            printf("var est '%s'\n", var);
        }
        return 0;
    }
     
    /* définition de sub_str*/
    char *str_sub (const char *s, unsigned int start, unsigned int end)
    {
       char *new_s = NULL;
     
       if (s != NULL && start < end)
       {
    /* (1)*/
          new_s = malloc (sizeof (*new_s) * (end - start + 2));
          if (new_s != NULL)
          {
             int i;
     
    /* (2) */
             for (i = start; i <= end; i++)
             {
    /* (3) */
                new_s[i-start] = s[i];
             }
             new_s[i-start] = '\0';
          }
          else
          {
             fprintf (stderr, "Memoire insuffisante\n");
             exit (EXIT_FAILURE);
          }
       }
       return new_s;
    }
    Si tu défini sub_str dans un fichier mais que tu l'utilise dans un autre, il faut pense à écrire un fichier header (.h) qui déclare la fonction.

    ex :
    • sub_str.c : contient le code de la fonction
    • sub_str.h : déclare la fonction
    • toto.c : utilise sub_str() et inclut sub_str.h (#include "sub_str.h")
    Dernière modification par Invité(e) ; 24/06/2010 à 15h35. Motif: % --> %s

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    En effet, j'ai oublié de préciser : la fonction est définie dans le même fichier.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par bilss Voir le message
    En effet, j'ai oublié de préciser : la fonction est définie dans le même fichier.
    avant ou après utilisation ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Très bonne remarque : après utilisation

    En déplaçant le code cela fonctionne!

    Merci beaucoup de ton aide et de ta rapidité!

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    J'y pense, un compilateur bien configuré aurai du te donner un avertissement disant que la fonction sub_str n'était pas déclarée. Ce qui t'aurai peut-être aidé à trouver d'où venait le problème.

    Ton compilateur est-il bien configuré ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    J'y pense, un compilateur bien configuré aurai du te donner un avertissement disant que la fonction sub_str n'était pas déclarée. Ce qui t'aurai peut-être aidé à trouver d'où venait le problème.

    Ton compilateur est-il bien configuré ?
    Comment puis-je vérifier cela?

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par bilss Voir le message
    Comment puis-je vérifier cela?
    Quand tu as compilé, ton compilateur a-t-il donnée un message du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning function sub_str undeclared
    Si tu n'as pas eu ce genre de message, c'est que ton compilateur pourrait être mieux configuré. http://emmanuel-delahaye.developpez....ques-codage-c/
    Dernière modification par Domi2 ; 03/08/2011 à 22h45.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Non je n'ai pas eu de message de ce genre.

    Merci pour le lien, je regarderai cela en détails!

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

Discussions similaires

  1. problème appel de procédure (type incompatible)
    Par pickanier dans le forum VBA Word
    Réponses: 5
    Dernier message: 04/04/2011, 14h53
  2. Probléme de Casting d'un type de retour java
    Par KnowPart dans le forum SQL
    Réponses: 2
    Dernier message: 15/12/2010, 15h42
  3. Probléme de Casting d'un type de retour java
    Par KnowPart dans le forum JDBC
    Réponses: 0
    Dernier message: 15/12/2010, 12h59
  4. Problème de content type lors d'un l'appel de WebService
    Par fab76000 dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 10/12/2010, 16h46
  5. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48

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