Я заметил это странное поведение с конкатенацией строк, несмотря на то, что strcmp
возвращает ноль, показывая, что обе формы идентичны
Включаемый файл options.h
как следует
struct options = {
std::string ctifile;
...
};
Основной файл пишется двумя способами
Способ 1
#include "options.h"#include <string>
#include "cantera/IdealGasMix.h"
options opt = {
"mech/tot.cti"};
IdealGasMix gas(opt.ctifile, ...);
Во втором методе
#include "options.h"#include <string>
#include "cantera/IdealGasMix.h"
options opt = {
"tot.cti"};
IdealGasMix gas(std::string("mech/") + opt.ctifile, ...);
По какой-то причине только способ 2 не может найти указанный файл. Есть указатели? (каламбур предназначен)
strcmp ожидает cstrings, которые вы можете получить, перейдя
std::string x = "blah blah";
assert(strcmp(x.c_str(), x.c_str()) == 0);
но если вы все равно используете std :: strings, почему бы просто не использовать std :: string :: compare
std::string x = "blah blah";
assert(x.compare(x) == 0);
http://www.cplusplus.com/reference/string/string/compare/
предостережение: если вы пытаетесь сравнить строки в юникоде, тогда простой strcmp может не всегда работать
Других решений пока нет …