C++:矢量<string>到字符**
C++: vector<string> to char**
我正在转换我的应用程序,以便能够用作库。为此,我想提供将字符串向量传递给库的默认运行例程的可能性。
我遇到的问题实际上是创建char**
。这是我当前的实现,由于它不起作用,因此在源代码中注释掉:
IceTea* IceTea::setupCli(vector<string> strings) {
int argc=strings.size(), i=0;
char* argv[argc];
vector<string>::iterator it;
for(it=strings.begin(); it != strings.end(); ++it) {
argv[i++] = (char*)it->c_str();
}
// Pass the char** to the original method.
return this->setupCli(argc, argv);
}
我得到的错误:
src/IceTea.cpp:132:18: error: no matching member function for call to 'setupCli'
return this->setupCli(argc, argv);
~~~~~~^~~~~~~~
src/IceTea.h:44:13: note: candidate function not viable: no known conversion from 'char *[argc]' to 'const char **' for 2nd argument
IceTea* setupCli(int, const char**);
^
src/IceTea.cpp:124:17: note: candidate function not viable: requires single argument 'strings', but 2 arguments were provided
IceTea* IceTea::setupCli(vector<string> strings) {
恐
怕您无法在恒定时间内将vector<string>
转换为char**
。vector<string>
可以很容易地转换为string*
,string
可以很容易地转换为char*
,但向量不能转换为char**
。实际上,这是一个非常类似于为什么int[10][20]
不能简单地转换为int**
的问题。
现在,如果你绝对必须这样做,那么
vector<char*> pointerVec(strings.size());
for(unsigned i = 0; i < strings.size(); ++i)
{
pointerVec[i] = strings[i].data();
} //you can use transform instead of this loop
char** result = pointerVec.data();
代码的主要问题是您使用的是返回const char *
的c_str
。请注意,我使用的是 data()
成员函数,它返回非常量指针。您的尝试与我的建议之间的另一个区别是,您使用的是长度不是常量表达式的数组。这在标准C++中是非法的。我改用了一个向量,后来把它转换为具有相同data()
函数的指针。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存