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 :

Malloc et affectation de mémoire


Sujet :

C++

  1. #21
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Et bien, je vais stoquer un certain nombre de char en provenance d'un fichier.
    Dans ce cas comme je te l'ai dit, utilise std::vector ou std::string (selon l'utilisation). Il y a des exemples dans la FAQ.

    heu char* peut etre considéré comme un string pour certaines fonctions, non?
    Un tableau de char terminé par un '\0' est considéré comme une chaîne en C.
    En C++, c'est std::string.

    Oyui, mais elle ne devrait pas contenir plus de 1500 char, non ? et elle me di que cela fait 1512... (désolé d'etre autant borné, je ne comprend pas trop)
    new t'a alloué 1500 caractères, mais si strlen ne trouve pas de 0 dans ces 1500 caractères il va continuer (et lire une zone mémoire non définie, d'où un comportement indéfini).

  2. #22
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Merci Laurent,
    Je vais utilisé std::string et revenir pour dire si cela fonctionne bien.
    Désolé d'avoir pris la tête a tt le monde... mais avec tes explications, j'ai compris ce qui clochait dans mon code. merci bien

  3. #23
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int rc=read (Fichier, &buf, sizeof(buf));
      if (rc == -1) 
        {
          perror("read(rc)");
          exit(1);
        }
    plus simple et met le contenu de fichier dans buf (assez grand)

  4. #24
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ifstream ifs("fichier.txt");
    std::string s((std::istream_iterator<char>(ifs), std::istream_iterator<char>()));

  5. #25
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ou plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ifstream ifs("fichier.txt", std::ios_base::binary);
    std::string s((std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>()));

  6. #26
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ifstream ifs("fichier.txt", std::ios_base::binary);
    std::string s((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
    Qui dit mieux?

  7. #27
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Ca devient crade, ca joue avec les parenthèses...

  8. #28
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par lun4t1k
    Ca devient crade, ca joue avec les parenthèses...
    Elles sont necessaires -- la bonne vieille difference entre declaration et definition...

  9. #29
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ou alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::ifstream ifs("fichier.txt", std::ios_base::binary);
    std::istreambuf_iterator<char> begin(ifs);
    std::istreambuf_iterator<char> end;
    std::string s(begin, end);

  10. #30
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Ca m'en fait des choix

  11. #31
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    essaie :

    fichier2[666] = 0;

    le resultat DEVRAIT etre 666 (il peut etre inferieur si ton buffer contient un 0 avant celui que l on vient d ajouter)

  12. #32
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    oups, pardon , j'avais pas vu qu'il y avait 3 pages sur le forum ...

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ifstream fichier("monFichier.txt");
    if (!fichier.good()){
    	// oups :)
    	}
     
    vector<string> lignes;
    string ligne;
    while ( getline( fichier, ligne ) ){
    	lignes.push_back(ligne);
    	}
    <edit> c'est mochard , il ya un moyen de préciser le type de code ?
    <edit2>
    fucking guillemet (merci au passage)

  14. #34
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    t'as oublié un guillemet

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Allocation mémoire : tableau vs malloc
    Par scorbo dans le forum Débuter
    Réponses: 4
    Dernier message: 15/06/2007, 12h47
  2. Réponses: 20
    Dernier message: 13/02/2007, 11h50
  3. Réponses: 4
    Dernier message: 20/11/2006, 01h02
  4. Recoder malloc -> Questions sur la mémoire
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 15/03/2006, 18h11
  5. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23

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