gpt4 book ai didi

c++ - 如何将字符串 vector 传递给 foo(char const *const *const)?

转载 作者:可可西里 更新时间:2023-11-01 17:52:50 28 4
gpt4 key购买 nike

编辑: 在实现 James Hopkin 的建议后,我仍然收到“无效名称‘null’”的警告,这比那些奇怪的字符要好得多。然后,我回去再次阅读库文档,结果发现对于那个特定的函数,它的参数应该比 aNames 的大小多一个非 NULL 字符串元素。该附加字符串还有其他用途。再添加一个字符串后,代码运行正常。都是我的错,我很抱歉。

原帖:

你好,

这是我的第一篇文章,所以请多多关照。我在这个论坛上搜索并用谷歌搜索,但我仍然找不到答案。这个问题困扰了我一天多了,请大家帮帮忙。谢谢。

我需要将字符串 vector 传递给库函数 foo(char const *const *const)。我不能传递 &Vec[0] 因为它是一个指向字符串的指针。因此,我有一个数组并将 c_str() 传递给该数组。以下是我的代码(aNames是字符串的 vector ):

const char* aR[aNames.size()];

std::transform(aNames.begin(), aNames.end(), aR,
boost::bind(&std::string::c_str, _1));
foo(aR);

但是,它似乎会导致一些未定义的行为:

如果我运行上面的代码,函数 foo 会在 aR 中抛出一些关于非法字符 ('èI' blablabla) 的警告。

如果我像这样在函数 foo 之前打印 aR:

std::copy(aR, aR+rowNames.size(), 
std::ostream_iterator<const char*>(std::cout, "\n"));
foo(aR);

然后,一切都很好。我的问题是:

  1. 转换是否会导致未定义的行为?如果是,为什么?

  2. 将字符串 vector 传递给 foo(char const *const *const) 的正确方法是什么?

最佳答案

因为 foo 只接受一个指针,我大胆猜测它需要一个以 NULL 结尾的数组。为 aR 分配一个额外的元素并为其分配 NULL。

我的建议是:

std::vector<const char*> c_strings;
c_strings.reserve(aNames.size() + 1);

std::transform(
aNames.begin(), aNames.end(),
std::back_inserter(c_strings),
boost::bind(&std::string::c_str, _1)
);

c_strings.push_back(0);
foo(&c_strings[0]);

关于c++ - 如何将字符串 vector 传递给 foo(char const *const *const)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2883602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com