【发布时间】:2016-03-28 17:43:57
【问题描述】:
我有一些返回非空终止字符串的旧函数。
struct legacy {
char a[4]; //not null terminated
char b[20]; //not null terminated
};
我传递了很多这些 char 数组,我需要一种干净的方法将它们转换为以 null 结尾的。
到目前为止,这就是我正在做的事情:
legacy foo;
std::string a(foo.a, sizeof(foo.a));
std::string b(foo.b, sizeof(foo.b));
bar(foo.a.c_str(), foo.b.c_str());
有没有一种更简洁的方法可以使用类和模板来将此代码简化为...
legacy foo;
bar(make_null_terminated(foo.a), make_null_terminated(foo.b));
【问题讨论】:
-
bar()只接受const char*吗?它会保留它们还是 ntbs 的生命周期不必持续到对bar()的调用? -
@Barry bar 只需要一个
const char* -
你能把它改成其他东西还是你无法控制的?
-
@Barry,很遗憾这超出了我的控制范围。
标签: c++ templates c-strings c++03 null-terminated