Salut à tous,

je cherche à passer sur mac un code développé sur windows.

J'ai commencé par être confronté à une différence concernant les chemins relatifs que j'ai réglé avec _NSGetExecutablePath.

Maintenant je me retrouve avec un comportement étrange sur une std::string (il n'y a peu être aucun rapport avec le passage sur mac mais ça fonctionnait sous windows alors je préfère vous le dire).

Mon problème est le suivant : je lis dans un fichier le nom d'un autre fichier à l'aide de la fonction :

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
string readFileName(string fileName, string tag)
{
    string line;
    string result;
    string balise = string(tag);
 
    ifstream file(fileName, ios::in);
 
    if(file)
    {
        while(!file.eof())
        {
            getline(file, line);
 
            if (line.find(balise) != string::npos)
            {
                result = line.substr(balise.length()+3);
            }
        }
    }
 
    file.close();
 
    return result;
}
Ma std::string est bien lu mais je ne peut pas la modifier sans comportements étranges.

Admettons que mon fichier soit : monFichier.txt.

Si, par exemple, je veux l'afficher encadré par deux lettres :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
cout << "a" << fileName << "b" << endl;
j'obtiens : bonFichier.txt (le m à été remplacé par le a puis par le b je suppose).

Si j'avais écris :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
cout << "a" << fileName << "bbb" << endl;
j'aurais obtenu : bbbFichier.txt

Et si j'avais voulu concaténer deux std::string :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
fileName += string("b");
cout << fileName << endl;
ou encore

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
fileName.append(string("b"));
cout << fileName << endl;
j'aurais obtenu dans les deux cas : bonFichier.txt.

Est ce que ce comportement vous dit quelque chose ?

Un grand merci d'avance pour votre aide.