我有一些C +数组,我按如下方式构建:
std:array<const char *, 4) test1 = {abc.c_str(), def.c_str(), ghi.c_str()};
其中abc
,def
,ghi
为std::string
我必须将此数组传递给另一个具有以下原型的函数:
(int argc, char * argv[])
我应该如何修改数组,以便为non-const char*
提供可以传递给上述函数的我。或者我应该将函数修改为const char *。我不确定该函数是否尝试在某处修改char *,因为此函数代码不是我的,当前也不可用。
但是,无论如何,如果我将如何传递非const char将会很好*数组到上面的函数?
答案 0 :(得分:2)
如果函数有可能修改字符串,则应将字符串的大小调整为函数可能使用的最大大小,然后在返回时再次调整大小。
abc.resize(max);
DoSomething(&abc[0]);
abc.resize(strlen(&abc[0]));
如果您知道该函数不修改字符串的事实,则函数原型对您说谎。你可以躺下来:
DoSomething(const_cast<char *>(abc.c_str()));
答案 1 :(得分:1)
这应该有效
abc.append(1, 0); // guarantee NUL termination
def.append(1, 0);
ghi.append(1, 0);
std:array<char *, 4> test1 = {abc.data(), def.data(), ghi.data()};
或
abc.append(1, 0);
def.append(1, 0);
ghi.append(1, 0);
std:array<char *, 4> test1 = {&abc[0], &def[0], &ghi[0]};