2016-10-08 4 views
0

Я замечал это странное поведение с конкатенации, несмотря на то, что strcmp возвращает ноль, показывая обе формы идентичныСтранный C++ поведение конкатенация

инклюднике 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 не удается найти указанный файл. Любые указатели? (Каламбур)

+1

[Нет причин, по которым это не должно работать.] (Http://cpp.sh/3yln) – amanuel2

+0

Что-то еще идет не так, и из того, что вы опубликовали, не ясно. Вам нужно придумать [mcve], который показывает проблему. – MicroVirus

+0

Работа для меня. Я подозреваю, что у вас аргумент аргумента функции газа – Naidu

ответ

1

зЬгстр ожидает cstrings, который вы можете получить, перейдя

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

, но если вы используете STD :: строки в любом случае, почему бы просто не использовать зЬй :: строку :: сравнить

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

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

нюанс: если вы пытаетесь сделать сравнение юникод строк, то просто зЬгстр не всегда может работать