奇怪的C ++字符串连接行为

时间:2016-10-08 18:33:58

标签: c++ string struct string-concatenation

尽管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无法找到指定的文件。有什么指针吗? (双关语)

1 个答案:

答案 0 :(得分:1)

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/

警告:如果您尝试比较unicode字符串,那么简单的strcmp可能并不总是有效