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 :

return makes integer from pointer without a cast


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut return makes integer from pointer without a cast
    bonjour tout le monde
    je debute en C (apres du PHP et du python, dur dur) et je doit faire un pti programme adn to arn

    Voila mon code je ne comprend pas pourquoi j ai ce message d'erreur à la compilation:
    return makes integer from pointer without a cast
    (je ne dois pas utiliser de pointeurs)

    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
    #include <stdio.h>
    #include <stdlib.h>
    char adn2arn(char adn[],char arn[],int lSeq)
    {
    	int i;
    	for (i=0;i<lSeq;i++)
    	{
    		if(adn[i]=='T')
    		{
    		arn[i]='U';
    		}
    		if(adn[i]=='A'||adn[i]=='G'||adn[i]=='C')
    		{
    		arn[i]=adn[i];
    		}
    	}
    	return (arn);
    }
    int main(void)
    {
    	int lSeq=20;
    	char seq[20]="GAATGCGTGATGCGTGAATT", arn[20];
    	printf("%s\n%s\n", seq, adn2arn(seq, arn, lSeq));
    }

    si quelqu'un peut m'aider, merci d'avance!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Salut,
    le prototype de ta fonction adn2arn est de type "char" et à la fin, tu renvoies un (char *) [car arn est un tableau et donc un pointeur en C).

    Tu modifies donc:

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    char * adn2arn(char adn[],char arn[],int lSeq)
    {
         int i;
         for (i=0;i<lSeq;i++)
         {
    >-------  if(adn[i]=='T')
    >-------  {
    >-------       arn[i]='U';
    >-------  }    
    >-------  if(adn[i]=='A'||adn[i]=='G'||adn[i]=='C')
    >-------  {
    >-------       arn[i]=adn[i];
    >-------  }    
         }
         return (arn);
    }    
    int main(void)
    {
         int lSeq=20;
         char seq[20]="GAATGCGTGATGCGTGAATT", arn[20];
         printf("%s\n%s\n", seq, adn2arn(seq, arn, lSeq));
    return 0;
    }
    +

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Il y a un problème avec ta fonction.
    Son type de retour est char et pourtant tu renvoies arn qui est déclaré comme un tableau de char.

    Tu devrais essayer de déclarer ta fonction par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void adn2arn(char adn[],char arn[],int lSeq)
    ne pas renvoyer de valeur et l'appeler avant le printf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s\n%s\n", seq, arn);
    Sauf erreur de ma part, il y a un autre bogue subtil avec la taille de ton tableau et la longueur de ta chaîne d'ADN, mais je te laisse chercher un peu !

    PS. Bulki, je n'avais pu lu ta réponse, nous avons dû poster en même temps !

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    merci pour ta reponse bulki
    j ai changé comme tu m'as dis mais j ai une autre erreur:
    ligne 23:warning: cast from pointer to integer of different size
    et apres compilation j ai toujour une erreur de segmentation..

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    merci pour ta reponse Corentor
    nous avons posté en meme temps..
    en fait j ai besoin de la valeur de arn
    le print du main est juste la pour faire marcher ma fonction

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Je ne comprends pas pourquoi tu as besoin de la valeur de arn puisque tu la connais lors de l'appel (arn est déclarée par main).

    Avec la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * adn2arn(char adn[],char arn[],int lSeq)
    tu ne fais que renvoyer l'adresse d'arn que tu as fournie en entrée.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    en fait c'est un enoncé, je doit declarer arn vide dans le main:

    Créez une fonction nommée adn2arn() qui accèpte trois arguments : deux chaînes de
    caractères et un entier (leur longueur).
    Mettez dans le corps de cette fonction les instructions qui génèrent la séquence d'arn à partir
    de la séquence d'adn.
    Dans le programme principal, remplacez les instructions de génération de la chaîne d'arn par
    l'appel à la fonction adn2arn().

    merci d'essayer de me filer un coup de main

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par nanocode
    Créez une fonction nommée adn2arn() qui accèpte trois arguments : deux chaînes de
    caractères et un entier (leur longueur).
    Le type de retour de adn2arn() t'est-il imposé ? Je ne le vois pas ici.

    Citation Envoyé par nanocode
    Dans le programme principal, remplacez les instructions de génération de la chaîne d'arn par
    l'appel à la fonction adn2arn().
    Si je comprends bien, il y a un programme principal fourni avec l'énoncé, qu'il faut simplifier par l'appel d'une fonction adn2arn. C'est bien cela ? Si oui, pourrais-tu nous montrer ce programme ?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    programme principal=main
    ce sont des exos destinés à faire comprendre au biologiste les fonctions en c
    j avais ce qui suit et je doit faire la meme chose avec une fonction de generation d'arn

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
    	int lSeq=20, i;
    	float rapp=0.0;
    	char seq[20]="GAATGCGTGATGCGTGAATT", arn[20];
    	for (i=0;i<20;i++)
    	{
    		if(seq[i]=='T')
    		{
    			arn[i]='U';
    		}
    		if(seq[i]=='A'||seq[i]=='G'||seq[i]=='C')
    		{
    			arn[i]=seq[i];
    		}
    	}
    	printf("%s\n%s\n", seq, arn);
    }
    j'aimerai bien savoir ce qui fait bugger le programme corrigé par bulki:

    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
    char*  adn2arn(char adn[],char arn[],int lSeq)
    {
    	int i;
    	for (i=0;i<lSeq;i++)
    	{
    		if(adn[i]=='T')
    		{
    		arn[i]='U';
    		}
    		if(adn[i]=='A'||adn[i]=='G'||adn[i]=='C')
    		{
    		arn[i]=adn[i];
    		}
    	}
    	return (arn);
    }
    int main(void)
    {
    	int lSeq=20;
    	char seq[20]="GAATGCGTGATGCGTGAATT", arn[20];
    	printf("%s\n%s\n", seq, adn2arn(seq, arn, lSeq));
    return 0;
    }

    ps: j ai pas vu le deuxieme pti bug

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Tu remarqueras que dans la solution que je te proposais, la ligne du printf est identique à l'énoncé original.

    Si je lis bien ton énoncé, il ne t'était pas demandé de toucher à ce printf.

    Pour la solution de Bulki, je vais regarder (s'il ne trouve pas d'ici là )

    De plus, comme je l'avais signalé, il me semble y avoir un bogue à la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char seq[20]="GAATGCGTGATGCGTGAATT", arn[20];

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    merci corentor de suivre mon pb
    c est une suite d'exos et pour la suite j ai besoin de cette fonction retournant ma chaine d'arn et non pas de l'afficher
    je me serais bien contenté d'un printf!

    De plus, comme je l'avais signalé, il me semble y avoir un bogue à la ligne suivante :
    aie, je compte 20 bases pour un tableau a 20 entrées (0-G,1-A...19-T)... suis nul ou quoi?!

  12. #12
    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
    j'aimerai bien savoir ce qui fait bugger le programme corrigé par bulki
    La chaîne construite par adn2arn(...) n'est pas terminée correctement par la valeur 0. Du coup, le printf dépasse la zone mémoire attribuée à arn[].
    Retourner arn n'est pas forcément une mauvaise idée puisqu'elle permet ce type d'écriture à un coût minime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s\n%s\n", seq, adn2arn(seq, arn, lSeq));

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    merci diogene
    il faut que je rajoute une entrée avec 0 à arn?
    de quelle maniere je m'y prend?

  14. #14
    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
    ligne 23:warning: cast from pointer to integer of different size
    Je ne sais pas où intervient ce warning dans le code, mais il est la signature d'un code mal foutu : Il ne doit y avoir aucun cast ou conversion entre entier et pointeur (sauf à la rigueur si l'entier est 0) même si la chose est tolérée (hélas) par le langage

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Aucune des deux solutions (avec type de retour à void ou à char *) ne limite l'utilisation à l'affichage. Ce que j'essaie de t'expliquer est que le type de retour est ici redondant, puisque tu ne gères pas les erreurs (la valeur de retour sera toujours égal à la valeur d'une de tes entrées, que tu connais déjà).

    Citation Envoyé par nanocode
    aie, je compte 20 bases pour un tableau a 20 entrées (0-G,1-A...19-T)... suis nul ou quoi?!
    Tu as bien compté, et c'est bien là le problème..

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par diogene
    Je ne sais pas où intervient ce warning dans le code, mais il est la signature d'un code mal foutu : Il ne doit y avoir aucun cast ou conversion entre entier et pointeur (sauf à la rigueur si l'entier est 0) même si la chose est tolérée (hélas) par le langage
    a l'appel de ma fonction adn2arn, je n ai pas essayé de faire ce genre de chose sciemment!

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par diogene
    Retourner arn n'est pas forcément une mauvaise idée puisqu'elle permet ce type d'écriture à un coût minime

    Code :
    printf("%s\n%s\n", seq, adn2arn(seq, arn, lSeq));
    Je suis d'accord sur ce point.
    La valeur de retour a un côté pratique pour l'appel depuis des fonctions.
    Par contre, on peut utiliser les valeurs de arn avec une fonction retournant void ou même un code d'erreur, or d'après les réponses de nanocode, je ne suis pas sûr qu'il en soit convaincu.

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Corentor
    Ce que j'essaie de t'expliquer est que le type de retour est ici redondant, puisque tu ne gères pas les erreurs (la valeur de retour sera toujours égal à la valeur d'une de tes entrées, que tu connais déjà).
    donc ma fonction me retourne arn[] vide comme je lui ai entré?

  19. #19
    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
    il faut que je rajoute une entrée avec 0 à arn?
    de quelle maniere je m'y prend?
    Avant de sortir de la fonction, lorsque tout ce qui est utile a été écrit dans arn, tu ajoutes derrière 0
    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
    char seq[21]="GAATGCGTGATGCGTGAATT", arn[21];
    .....
    	for (i=0; seq[i] !=0;i++)
    	{
    		if(seq[i]=='T')
    		{
    			arn[i]='U';
    		}
    		if(seq[i]=='A'||seq[i]=='G'||seq[i]=='C')
    		{
    			arn[i]=seq[i];
    		}
    	}
            arn[i] =0;

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Corentor
    on peut utiliser les valeurs de arn avec une fonction retournant void ou même un code d'erreur, or d'après les réponses de nanocode, je ne suis pas sûr qu'il en soit convaincu.
    effectivement
    je suis largué, tout est beaucoup plus simple en PHP ou en python!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2014, 00h29
  2. assignment makes integer from pointer without a cast
    Par MaybeMaybe dans le forum Débuter
    Réponses: 6
    Dernier message: 05/01/2014, 20h50
  3. Réponses: 2
    Dernier message: 02/04/2010, 12h44
  4. Réponses: 3
    Dernier message: 19/03/2009, 10h56
  5. Probleme de pointer without of cast
    Par CyberTwister dans le forum Windows
    Réponses: 5
    Dernier message: 06/04/2007, 13h45

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