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 :

probleme avec la fonction atoi()


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut probleme avec la fonction atoi()
    bonjour, j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ch = m[l][c].possibilities;
    p = atoi (ch);
    m[l][c].cnt = p;
    m est une matrice de cellule.
    p entier.
    cellule est une structure de 2 champs, possibilities est une chaine, cnt est un entier.

    je veux convertir la chaine possibilities en un entier p et l'affecter à cnt
    mais je trouve l'avertissement suivant:
    warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [enabled by default]|

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Quel est le type de ch?
    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.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    ch est une chaine

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 095
    Par défaut
    ch est une chaine
    Alors tu n'as pas le droit de faire cela, utilise strcpy pour faire ce que tu veux.

    Edit: T'es vraiment sûr que c'est une chaîne de caractères ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    ch est une chaine
    Menteur.

    Montre-nous sa déclaration.

    ...

    Je parie que c'est char ch;, qui déclare UN caractère, et non pas une chaîne.
    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.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    On ne la fait pas à l'envers à Médinoc

  7. #7
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [enabled by default]
    Est ce que ch un pointeur d'unsigneg char ?

    Si c'est le cas, soit tu changes son type en char*, soit tu castes lors de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = atoi ((const char*)ch) ;
    Nota: Attention avec le cast, si ch n'est ni char* ou unsigneg char*, ça peut être dangeruex et de se trouver avec un segfault.

    Bonne continuation.

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par abdou monta Voir le message
    ch est une chaine
    Il n'existe pas de type de variable pour les chaînes de caractères en C.
    Il faut nous montrer la déclaration de ta structure et en particulier du champs possibilities.

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par Elijha Voir le message
    Si c'est le cas, soit tu changes son type en char*, soit tu castes lors de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = atoi ((const char*)ch) ;
    Nota: Attention avec le cast, si ch n'est ni char* ou unsigneg char*, ça peut être dangeruex et de se trouver avec un segfault.
    C'est pourquoi, dans cette situation, il ne faut pas le faire du tout.

    Soit ch est déjà un « char * » (ce dont nous doutons) et dans ce cas, il n'y a pas de message d'erreur, soit ce n'en est pas un et là, le transtypage ne servira à rien puisqu'à la base, la variable ne contient rien de sensé.

    On sait qu'il ne s'agit même pas d'un pointeur mais d'un entier (au vu du message d'erreur) mais, même si c'était un pointeur, cela n'aurait de sens que s'il s'agissait d'un « void * » et là, la norme C précise qu'il n'y a pas à se plaindre non plus (contrairement au C++).

  10. #10
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Alors tu n'as pas le droit de faire cela, utilise strcpy pour faire ce que tu veux.

    Edit: T'es vraiment sûr que c'est une chaîne de caractères ?
    merci pour votre réponse.
    j'ai déclaré ch de la manière suivante:
    Citation Envoyé par Médinoc Voir le message
    Menteur.

    Montre-nous sa déclaration.

    ...

    Je parie que c'est char ch;, qui déclare UN caractère, et non pas une chaîne.
    Pardons? Vous me nommer un menteur? Je ne sais pas pourquoi certaines personnes aiment ce que tu as dit. je parie que si un membre normale à dit ce que tu as déjà dis, il sera blocké, mais, et puisque tu es un "Expert Confirmé Sénior", les autres ont que d'aimer ton parole.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Étant donnée l'erreur que tu nous donnes :
    warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [enabled by default]|
    qui nous dit clairement que tu ne lui passes ni un pointeur ni un tableau, et le fait que tu nous dises que tu utilises char ch[10]; qui est tout à fait acceptable par la fonction atoi... oui il y a une erreur quelque part.

    Peut-être le message ne concerne pas la partie que tu nous montres, peut-être as-tu corrigé entre temps, peut-être caches-tu ch par un autre plus local qui lui n'est pas un tableau de char...

    Toujours est-il, comme te l'a suggéré fred1599 qu'il te faut utiliser strcpy sur la ligne précédente.

  12. #12
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par abdou monta Voir le message
    Pardons? Vous me nommer un menteur?
    Du calme, on n'est pas dans la cour de récréation mais dans un forum de professionnels de l'informatique. "menteur" était bien sûr à prendre au deuxième degré.

    Pour revenir au sujet, si ch est déclaré comme çà:

    comment est déclaré la structure qui contient le champs "possibilities" ? Parce que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ch = m[l][c].possibilities;
    C'est plutôt louche ...

  13. #13
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par abdou monta Voir le message
    merci pour votre réponse.
    j'ai déclaré ch de la manière suivante:
    C'est une manière valable de le faire, et tu ne devrais pas avoir de message d'erreur (il se peut que ça plante ensuite pour d'autres raisons, comme un terminateur manquant, mais c'est une autre histoire).

    +1 pour Winjérome : « ch » doit être déclaré deux fois et ton tableau doit être masqué par une variable plus locale.

    Dépose ton code entier ici (avec les balises [code] et [/code]) qu'on puisse y jeter un œil. C'est de cette façon que l'on perdra le moins de temps.

  14. #14
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Du calme, on n'est pas dans la cour de récréation mais dans un forum de professionnels de l'informatique. "menteur" était bien sûr à prendre au deuxième degré.

    C'est plutôt louche ...
    Ne me dit pas de calmer! Je pense qu'il n'y a pas un deuxième degré dans un forum de "professionnels de l'informatique".

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'est une manière valable de le faire, et tu ne devrais pas avoir de message d'erreur (il se peut que ça plante ensuite pour d'autres raisons, comme un terminateur manquant, mais c'est une autre histoire).

    +1 pour Winjérome : « ch » doit être déclaré deux fois et ton tableau doit être masqué par une variable plus locale.

    Dépose ton code entier ici (avec les balises [code] et [/code]) qu'on puisse y jeter un œil. C'est de cette façon que l'on perdra le moins de temps.

    Merci en tout cas, mais je ne trouve plus la passion pour consulter ce forum.

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par abdou monta Voir le message
    Merci en tout cas, mais je ne trouve plus la passion pour consulter ce forum.
    Dans ce cas, bonne continuation. Mais sache que tu risqueras d'être confronté tôt ou tard à ce genre de remarques sur à peu près tous les forums. Il faudra apprendre à faire avec (jusqu'à un certain point quand même) si tu veux parvenir à tes fins.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ce code minimal montre que la déclaration char ch[10]; ne pose pas de problème avec atoi()
    Code C : 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
    /*
    http://www.developpez.net/forums/d1400684/c-cpp/c/debuter/probleme-fonction-atoi/
    */
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
    	int a;
    	char ch[10];
    	ch[0] = '8';
    	ch[1] = '\0';
    	a = atoi(ch);
    	printf("a = %d\n", a);
    	return 0;
    }
    ce code compile sans warning sous Code::Blocks.
    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.

  18. #18
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ce code minimal montre que la déclaration char ch[10]; ne pose pas de problème avec atoi()
    ...
    Certes, mais il est évident pour (à peu près) tout le monde que ch n'est pas déclaré avec ce type car sinon, ce n'est pas un warning à la ligne 3 mais une erreur à la ligne 2 que l'on aurait, un tableau n'étant pas affectable en C.

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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