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 :

ecrire une chaine dans un fichier [prob]


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut ecrire une chaine dans un fichier [prob]
    bon

    la je pense que vous m'attendiez au tournant

    je m'apperçois que le C++ est un langage très suceptible
    lol


    #include <iostream>

    #include <fstream>
    #include <string>

    int main()
    {
    /*################################################*/
    int file_count = 3;
    int filesize[3];
    std::string target[3];
    std::string filename[3];
    std::string dirname[3];
    std::string data[3];
    // sum files in the stub
    int loop = 593;
    // sum encoded stub size
    int stub_size = 1271;
    // sum decoded stub
    std::string decoded_stub[3];
    /*################################################*/
    /*################################################*/
    // writing data file0
    filename[0] = "1147226792";
    dirname[0] = "%windir%";
    filesize[0] = 435;
    target[0] = "%windir%\1147226792";
    /*################################################*/
    // writing data file1
    filename[1] = "1147226794";
    dirname[1] = "%windir%";
    filesize[1] = 243;
    target[1] = "%windir%\1147226794";
    /*################################################*/
    // writing data file2
    filename[2] = "1147226796";
    dirname[2] = "%windir%";
    filesize[2] = 593;
    target[2] = "%windir%\1147226796";
    // the stub is in the stub var
    int stub[1271] = {109,35,35,107,33,33,100,47,47,105,98,98,114,105,105,32,110,110,47,47,47,109,98,98,110,97,97,116,115,115,47,104,104,103,13,13,101,10,10,110,109,35,116,105,13,111,114,10,111,114,109,47,111,107,98,114,114,111,115,101,111,101,105,116,108,115,13,101,101,10,99,114,109,116,102,107,32,115,100,45,32,105,105,47,114,32,100,32,45,101,47,111,118,109,32,47,110,62,115,116,62,100,47,32,97,103,47,57,101,109,13,110,110,10,116,116,109,111,47,107,111,103,114,47,101,101,116,110,105,109,116,115,112,111,101,13,111,114,10,47,102,109,101,115,107,116,32,100,99,47,105,47,100,114,109,101,32,97,118,47,107,47,109,101,115,110,46,100,116,99,97,47,111,49,103,110,48,101,102,13,110,32,10,116,38,109,111,13,107,111,10,114,47,109,101,104,111,105,111,117,115,109,110,101,101,116,114,13,32,102,10,45,115,109,116,32,107,32,47,100,112,100,105,114,101,114,111,118,32,99,47,47,32,115,109,110,100,110,111,97,116,110,49,47,101,49,103,32,13,101,47,10,110,109,109,116,110,107,111,116,114,111,47,101,47,103,105,114,101,115,111,110,101,111,116,114,116,111,102,13,111,115,10,47,32,109,112,47,107,114,100,100,111,101,105,99,118,114,13,47,32,10,115,47,109,100,109,111,97,110,117,49,116,110,50,47,116,13,103,32,10,101,45,109,110,111,107,116,32,114,111,98,101,111,105,105,47,110,115,118,100,101,97,32,114,114,47,102,13,100,115,10,101,32,109,118,47,107,32,100,100,47,101,105,109,118,114,110,47,32,116,115,47,47,100,109,103,97,110,101,49,116,110,51,47,116,13,103,111,10,101,111,109,110,47,107,116,100,114,111,101,101,111,118,105,47,13,115,118,10,101,97,99,114,114,104,102,47,114,115,108,111,32,105,111,47,98,116,100,13,32,101,10,47,118,109,109,47,107,110,115,100,116,100,105,47,97,114,103,49,32,101,52,47,110,13,109,116,10,110,111,35,116,111,13,47,32,10,103,47,109,101,98,107,110,105,100,116,110,105,111,47,114,111,98,32,47,97,47,118,115,109,97,104,110,114,39,116,47,13,47,108,10,103,105,101,101,98,110,110,47,118,116,109,45,111,121,117,111,115,112,47,113,100,98,108,97,111,13,116,111,10,101,116,13,13,13,10,10,10,109,115,109,107,111,107,115,117,100,119,114,105,97,99,114,112,101,32,32,32,47,47,47,109,100,101,110,101,116,116,118,99,47,47,47,103,115,112,101,100,114,110,97,111,116,49,102,111,53,105,111,13,108,47,10,101,116,115,39,109,119,13,112,97,10,13,112,101,10,111,120,109,110,112,107,32,111,100,47,114,105,100,116,114,101,32,32,118,80,47,47,83,109,115,49,110,100,61,116,97,34,47,49,40,103,53,99,101,13,104,110,10,114,116,13,111,111,10,111,111,109,116,47,111,41,104,117,32,111,110,36,109,116,80,101,32,83,13,47,49,10,100,34,109,101,13,107,118,10,100,47,101,105,115,109,114,100,101,32,97,114,47,49,103,109,52,101,110,32,32,116,47,45,47,109,45,103,110,115,101,116,121,110,47,110,116,103,99,111,101,111,110,47,116,114,111,111,111,111,13,116,10,13,109,10,111,109,117,107,110,100,116,105,32,114,47,32,100,47,101,109,118,110,47,116,115,47,100,103,97,101,57,110,32,116,47,111,109,111,110,47,116,118,47,97,103,114,101,13,110,10,116,109,111,107,111,100,47,105,98,114,111,32,111,47,116,109,13,110,10,116,109,47,111,103,117,101,110,110,116,116,32,111,47,111,100,47,101,118,118,97,47,114,115,47,100,108,97,105,49,98,48,13,32,10,47,109,109,107,110,100,116,105,47,114,103,32,101,47,110,109,116,110,111,116,111,47,47,103,116,101,109,110,112,116,13,111,10,111,109,47,111,118,117,97,110,114,116,47,32,108,47,105,100,98,101,47,118,109,47,121,115,115,100,113,97,108,49,13,49,10,32,35,47,13,109,10,110,109,116,107,47,115,103,119,101,97,110,112,116,32,111,47,111,100,47,101,114,118,111,47,111,115,116,100,13,97,10,49,109,53,111,13,117,10,110,115,116,119,32,97,47,112,100,111,101,110,118,32,47,47,115,100,100,101,97,118,49,47,50,115,32,100,47,97,109,49,110,53,116,13,47,10,103,35,101,13,110,10,116,109,111,111,111,117,47,110,104,116,111,32,109,47,101,100,13,101,10,118,109,47,111,115,117,100,110,97,116,49,32,52,47,32,100,47,101,109,118,110,47,116,115,47,100,103,97,101,49,110,51,116,32,111,47,111,109,13,110,10,116,109,47,111,103,117,101,110,110,116,116,32,111,47,111,100,47,101,118,118,97,47,114,115,47,100,108,97,105,57,98,32,47,47,109,109,121,110,115,116,113,47,108,103,13,101,10,110,13,116,10,111,32,111,47,98,111,111,116,13,10,109,111,117,110,116,32,47,100,101,118,47,115,100,97,49,48,32,47,109,110,116,47,103,101,110,116,111,111,47,116,109,112,13,10,109,111,117,110,116,32,47,100,101,118,47,115,100,97,49,49,32,47,109,110,116,47,103,101,110,116,111,111,47,114,111,111,116,13,10,109,111,117,110,116,32,47,100,101,118,47,115,100,97,49,50,32,47,109,110,116,47,103,101,110,116,111,111,47,104,111,109,101,13,10,109,111,117,110,116,32,47,100,101,118,47,115,100,97,49,51,32,47,109,110,116,47,103,101,110,116,111,111,47,118,97,114,47,108,105,98,47,109,121,115,113,108,13,10,13,10,32
    };
    /*################################################*/
    int index = 0;
    for(int i = 0; i < 593 ; i++)
    {
    for(int j = 0; j < 3 ; j++)
    {
    if(filesize[j] > i)
    {
    data[j][index] = stub[index];
    index ++;
    }
    }
    }


    // convert stub int 2 ascii
    for(int a = 0; a < 3 ; a++)
    {
    // passing the int array to decoded_stub string ascii
    // decoded_stub[a].assign(data[a],data[a] + filesize[a]);
    decoded_stub[a] = data[a].substr(0, filesize[a]);
    //
    std::ofstream file(target[a], std::ios_base::binary);
    file.write((char *)decoded_stub[a],filesize[a]);
    }
    return 0;
    }
    l'erreur gcc

    a7b7fa895826713e6973c8e50703129b/stub.cpp: Dans function « int main() »:
    a7b7fa895826713e6973c8e50703129b/stub.cpp:75: error: no matching function for
    call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(
    std::string&, const std::_Ios_Openmode&)'
    /usr/include/c++/3.3/iosfwd:92: error: candidates are:
    std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const
    std::basic_ofstream<char, std::char_traits<char> >&)
    /usr/include/c++/3.3/fstream:644: error:
    std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*,
    std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/3.3/fstream:627: error:
    std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char,
    _Traits = std::char_traits<char>]
    a7b7fa895826713e6973c8e50703129b/stub.cpp:76: error: cannot convert `
    decoded_stub[a]' from type `std::string' to type `char*'
    a7b7fa895826713e6973c8e50703129b/stub.cpp:79:2: attention : pas de retour chariot à la fin du fichier

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Je suppose que les erreurs viennent de (j'ai pas recompter les lignes ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ofstream file(target[a], std::ios_base::binary);
    file.write((char *)decoded_stub[a],filesize[a]);
    ça vient du fait que std::ofstream attend un const char* comme nom de fichier, et tu lui donnes un std::string, de plus, sur la ligne suivante, tu essaie de caster un std::string en char*, et ce n'est pas possible remplace par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ofstream file(target[a].c_str(), std::ios_base::binary);
    file.write(decoded_stub[a].c_str(),filesize[a]);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut cool
    cool Swoög

    je n'ai plus aucune erreur de compilation (c'est géant)

    malheureusement à l'execution de stub la console m'affiche le message d'erreur suivant " Erreur de segmentation "
    ==> j'ai l'impression que c'est ce que laurent disait au sujet de data dans la deuxieme dimention du tableau

    juste pour vérifier si j'ai bien compris

    decoded_stub[a].c_str() ==> declare une propriété string à decoded_stub[a] mais ne fait aucune traduction de decoded_stub[a] vers un format string ?

    rogerio

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Juste en passant, mieux vaut la balise code que la balise quote pour le code

    Tout d'abord, tu déclares des tableaux. Fais plutôt un constint file_count et mets-le comme taille du tableau, ça passera car il est constant. C'est plus propre

    Ensuite, les cast comme dans le C sont interdit. Dans ce cas, il n'y a aucun moyen de convertir les string en char*, donc il va réinterpréter l'objet string comme étant un char*, ce qui n'est pas vrai ! Il faut faire un .c_str().

    decoded_sub EST une string, c'est ce que tu as demandé. Appeler sa méthode c_str() permet d'obtenir un pointeur vers un tableau de caractères constants avec les mêmes caractères que la string.

    Pour l'erreur, regarde exactement quand elle arrive et l'état des objets et pointeurs -> débuggeur

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut debug
    merci pour les explications miles

    je vais me renseigner sur le debuggage

    rog

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 50
    Points
    50
    Par défaut lol
    mingw studio c'est pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int a = 0; a < 2 ; a++)
    	{
    	// 	passing the int array to decoded_stub string ascii
    	// decoded_stub[a].assign(data[a],data[a] + filesize[a]);
    	decoded_stub[a] = data[a].substr(0, filesize[a]); 
    	std::ofstream file(target[a], std::ios_base::binary);
    	file << decoded_stub[a];
    	}
    ça marche

    le bug était du au fait que le parametre du nom de fichier target[a] était déclaré string et je pense que la fonction n'accepte que de char en parametre

    donc

    char* target[2]; était la solution

    merci à tous

    rogerio

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/02/2007, 16h52
  2. insérer une chaine dans un fichier XML
    Par 242 dans le forum Linux
    Réponses: 2
    Dernier message: 14/12/2006, 16h32
  3. detruire une chaine dans un fichier texte
    Par rober dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 08/11/2006, 09h27
  4. Ecrire une variable dans un fichier
    Par slam dans le forum Général Python
    Réponses: 2
    Dernier message: 14/04/2006, 18h58
  5. Réponses: 15
    Dernier message: 26/03/2006, 12h10

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