0

我有一些我构建的 C+ 数组,如下所示:

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

其中abc, def,ghistd::string

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

我应该如何修改数组以便给non-const char*我可以传递给上面的函数。或者我应该将函数修改为 const char*。我不确定该函数是否尝试在某处修改 char*,因为该函数代码不是我的,目前也不可用。
但是,无论如何最好问问我如何将非常量 char* 数组传递给上述函数?

4

2 回答 2

2

如果函数有可能修改字符串,则应将字符串调整为函数可能使用的最大大小,然后在返回时再次调整大小。

abc.resize(max);
DoSomething(&abc[0]);
abc.resize(strlen(&abc[0]));

If you know for a fact that the function does not modify the string, then the function prototype is lying to you. You can lie back:

DoSomething(const_cast<char *>(abc.c_str()));
于 2012-05-04T05:05:33.993 回答
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]};
于 2012-05-04T04:42:19.193 回答