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 allocation dynamique dans C++


Sujet :

C++

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut problème allocation dynamique dans C++
    bonsoir les amis,
    je veux faire une allocation dynamique d'une variable de type chaine de caractère mais j'ai eu beaucoup de problèmes lors de la compilation du programme.
    voici mon programme:
    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
     
    int main(){
     
    ...
     
       tab[0]="";
       string sequence[nb_seq];
       string seq;
      char *buffer2;
      buffer2=new char;
                    strncpy(buffer2,seq,k);
                     u++;
                     lamda=0;verif=0;
                        while((lamda<u) && (verif<1)){
                            X=strcmp(tab[lamda],buffer2);
                            if(X==0){
                            verif++;
                            }
                            lamda++;
                        }
                        if (verif==0){
                        tab[u]=buffer2;
                        }
                        else u--;
    ...
    error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'char* strncpy(char*, const char*, size_t)'|

    je pense que c'est un problème lors de la déclaration du buffer2 .
    merci pour votre aide

  2. #2
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'char* strncpy(char*, const char*, size_t)'|
    Tu essais en effet de convertir (ou comparer) une "string" en un "const char". Le type commun "char" n'a pas connaissance de la librairie "string". La conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char * chaineCaractères = laString.c_str();

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    merci pour votre aide.
    mais je n'ai pas compris qu'est ce que je dois convertir.
    dans mon exemple j'ai buffer2 mais je n'ai pas pu le convertir afin qu'il soit copier ou comparer dans le reste du programme.

  4. #4
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strncpy(buffer2,seq,k); /*devrait être :*/ strncpy(buffer2,seq.c_str(),k);

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Alors ça c'est vraiment un code de souillon !
    Qu'est-ce qu'il est censé faire ?

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu es obligé de te coltiner l'api C pour les chaines?
    string::substr() ne te satisfait pas?

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Citation Envoyé par mido1951
    buffer2=new char;
    Ça, ça alloue UN caractère. Juste la place pour une chaîne vide et son caractère nul.
    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.

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    si je mets un char* c'est une erreur!!!
    qu'est ce que je vais mettre selon vous?
    merci

  9. #9
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    je n'ai pas trouvé la solution pour l'allocation dynamique d'une chaine de caractère.est-ce qu'il y a une solution s'il vous plait?

  10. #10
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Citation Envoyé par mido1951 Voir le message
    je n'ai pas trouvé la solution pour l'allocation dynamique d'une chaine de caractère.est-ce qu'il y a une solution s'il vous plait?
    Arrêtes les conneries, utilises std::string et tu n'auras plus ce genre de problème

  11. #11
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    c'est faux!!
    pour utiliser après strncpy() il y a une erreur de conversion!!
    donc je ne peux pas utiliser string.

  12. #12
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strncpy( buffer2, const seq.c_str(), k );
    error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '2' to 'char* strncpy(char*, const char*, size_t)'|

    Ils indiquent ici la cause de ton erreur. C'est un minimum compréhensible non ?

    Si tu en as d'autres on ne peut pas les deviner.

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    C'est quoi ce "const"?
    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.

  14. #14
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    oui l'erreur reste même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string buffer2;
    strncpy( buffer2, const seq.c_str(), k );
    c'est la même erreur du programme.

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    string buffer2 = seq.substr(0, k);
    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.

  16. #16
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Citation Envoyé par mido1951 Voir le message
    c'est faux!!
    pour utiliser après strncpy() il y a une erreur de conversion!!
    donc je ne peux pas utiliser string.
    Que ce soit char*, strncpy et toute la clique : C'est du C. A moins que tu t'interfaces sur du C, tu ne dois pas utiliser ça en C++ qui plus est en le mixant avec des std::string.

    L'opérateur d'affectation sur les std::string se charge de faire la copie, l'opérateur [] te permet d'accéder à un caractère et substr te permet de prendre un morceau de la chaîne de caractères : Tu n'as pas besoin de faire appel à du C.

  17. #17
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par mido1951 Voir le message
    c'est faux!!
    pour utiliser après strncpy() il y a une erreur de conversion!!
    donc je ne peux pas utiliser string.
    pourquoi utiliser strncpy dans ce cas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::string s1 = "abcdefghijklmnopqrst";
    std::string s2 = s1.substr(0,5); // "abcde".
    Fait la même chose que strncpy

    substr peut faire un peu plus.
    http://www.cplusplus.com/reference/s...string/substr/

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/05/2008, 13h12
  2. Problème allocation dynamique ?
    Par Dark_Alex69 dans le forum C
    Réponses: 15
    Dernier message: 20/11/2007, 15h44
  3. problème allocation dynamique
    Par josef24 dans le forum Débuter
    Réponses: 6
    Dernier message: 12/11/2007, 12h31
  4. Réponses: 2
    Dernier message: 14/12/2006, 07h54
  5. [D7] - Allocation dynamique dans une DLL
    Par david_chardonnet dans le forum Delphi
    Réponses: 6
    Dernier message: 05/07/2006, 15h28

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