Странное поведение C ++ для конкатенации строк

Я заметил это странное поведение с конкатенацией строк, несмотря на то, что 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 не может найти указанный файл. Есть указатели? (каламбур предназначен)

0

Решение

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 может не всегда работать

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector