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 confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    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 confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    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]);
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    je vais me renseigner sur le debuggage

    rog

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    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