Problème conversion string to char*

totoscill Messages postés 48 Date d'inscription jeudi 26 avril 2007 Statut Membre Dernière intervention 10 décembre 2009 - 18 juin 2007 à 11:46
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 18 juin 2007 à 23:45
Bonjour,
je veut récupérer des infos dans un fichier. Pour cela il me faut convertir mes lignes récupérer "string" en "char*".
Voici mon code pour cette conversion:

string line;

size_t size = line.size() + 1;

char

*InfoLine=
new
char[size];

File.open(FileName,ios::in);

//ouverture du fichier

if(File){

cout<<

"!!!file open!!!\n\n\n"<<endl;
//instructions

while ( getline( File, line ) ){

strncpy( InfoLine, line.c_str(), size );

cout<Malheureusement, lorsque j'éxécute mon soft, le cout me renvoies n'importe quoi!
Quelqu'un pourrai t il m'aidé?

Je vous remercie

4 réponses

Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
18 juin 2007 à 12:04
Salut,

pourquoi ne pas lire ton fichier d'un bloc ? exemple ICI

sinon si tu veux lire absolument ligne par ligne tu peux faire :
[...]
string file = "fichier.txt";
string data = "";
ifstream mfile(file.c_str());//ouverture du fichier
if (!mfile) data = "erreur";
string lines;
while (getline(mfile, lines))//lecture des lignes du fichier
data += (lines + '\n');
mfile.close();
    
cout << data << endl;

[...]

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
totoscill Messages postés 48 Date d'inscription jeudi 26 avril 2007 Statut Membre Dernière intervention 10 décembre 2009
18 juin 2007 à 13:21
merci.
Je ne lis pas mon fichier d'un bloc parce que chaque ligne de mon fichier comporte des infos que je dois récupérer. Et le problème est la. Je n'arrive pas a récuperrer ces infos. Pour cela, il faut que je convertisse ma string en char. Sur chaque ligne, j'ai deux infos a récupérer qui ne sont pas l'une après l'autres.
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
18 juin 2007 à 13:44
Salut,

ce qui m'intrigue dans ton code c'est que tu alloue un tableau de 1 octect... :
string line; //chaîne videsize_t size line.size()+1;//du vide + 1 1 octect ^^
char* InfoLine = new char[size];//tableau de 1
.... donc la suite je ne suis pas surpris que tu n'ai pas ce que tu veux....

pour la petite adaptation tu peux faire (c'est un chouilla crado mais tu devrais y trouver ton compte):

#include <fstream>
#include

using namespace std;

int main(int argc, char **argv) {
    ifstream mfile("fichier.txt");//ouverture du fichier
    if (mfile) {
        string lines;
        long num = 0;
        while (getline(mfile, lines)) {//lecture des lignes du fichier
            const char* infoLine= lines.c_str(); //recup la ligne
            //affichage
            cout << "infoLine (num : " << (++num) << ") = " << infoLine << endl;
        }
        mfile.close();
    } else
        cerr << "Open error !" << endl;
       
    return 0;
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
18 juin 2007 à 23:45
"Je ne lis pas mon fichier d'un bloc parce que chaque ligne ..."
Suffit de 2 pointeurs à ballader dans le buffer pour détailler les lignes.

La lecture 'par ligne' n'existe pas, c'est les libs de surcouche fstream et iostream qui contiennent la masse de code nécessaire à simuler cela (ce code lent et inutile finira dans ton exe). Tout ceci cumulé à l'emploi de 'string' rendra ton code aussi "performant" que du VB.

ciao...
BruNews, MVP VC++
0