2016-10-08 1 views
0

J'ai remarqué ce comportement étrange avec une concaténation en dépit du fait que strcmp renvoie zéro, montrant les deux formes sont identiquescomportement de concaténation étrange chaîne C de

Le fichier d'options.h est le suivant

struct options = { 
    std::string ctifile; 
    ... 
}; 

le fichier principal est en cours d'écriture de deux façons

Méthode 1

#include "options.h" 
#include <string> 
#include "cantera/IdealGasMix.h" 

options opt = { 
    "mech/tot.cti" 
}; 

IdealGasMix gas(opt.ctifile, ...); 

Dans la deuxième méthode,

#include "options.h" 
#include <string> 
#include "cantera/IdealGasMix.h" 

options opt = { 
    "tot.cti" 
}; 

IdealGasMix gas(std::string("mech/") + opt.ctifile, ...); 

Pour une raison quelconque, seule méthode 2 est incapable de trouver le fichier spécifié. Des pointeurs? (Jeu de mots)

+1

[Aucune raison que cela ne fonctionne pas.] (Http://cpp.sh/3yln) – amanuel2

+0

Quelque chose d'autre ne va pas, et ce que vous avez publié n'est pas clair. Vous devez trouver un [mcve] qui montre le problème. – MicroVirus

+0

Travailler pour moi. Je soupçonne sur vous déclaration de l'argument de la fonction de gaz – Naidu

Répondre

1

strcmp attend CStrings que vous pouvez obtenir en allant

std::string x = "blah blah"; 
assert(strcmp(x.c_str(), x.c_str()) == 0); 

mais si vous utilisez std :: chaînes de toute façon, pourquoi ne pas simplement utiliser std :: string :: comparer

std::string x = "blah blah"; 
assert(x.compare(x) == 0); 

http://www.cplusplus.com/reference/string/string/compare/

mise en garde: si vous essayez de faire comparer les chaînes unicode alors strcmp simple peut pas toujours travailler