将字符串转换为非const char *

时间:2012-05-04 04:38:39

标签: c++

我有一些C +数组,我按如下方式构建:

std:array<const char *, 4) test1 = {abc.c_str(), def.c_str(), ghi.c_str()};

其中abcdefghistd::string

我必须将此数组传递给另一个具有以下原型的函数: (int argc, char * argv[])

我应该如何修改数组,以便为​​non-const char*提供可以传递给上述函数的我。或者我应该将函数修改为const char *。我不确定该函数是否尝试在某处修改char *,因为此函数代码不是我的,当前也不可用。
但是,无论如何,如果我将如何传递非const char将会很好*数组到上面的函数?

2 个答案:

答案 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]};