将char**传递给C++中的函数(const char**)
passing a char ** to a function(const char **) in C++
我正在尝试使用循环数据库的函数rrd_update_r
。
int rrd_update_r(const char *filename,const char *_template,
int argc,const char **argv);
函数接受作为第三个和第四个参数的众所周知的argc, argv
。
尽管我在这个项目中使用C++(和g++),rrd是用C编写的,因此我可以使用GNY/Linux中提供的函数wordexp(char *, wordexp_t*)
将string
的参数拆分为argv
数组。
问题是wordexp_t返回了一个char**类型的成员(作为argv),这显然与rrd_update_r函数调用不兼容。
/usr/include/rrd.h:238:15: error: initializing argument 4 of ‘int rrd_update_r(const char*, const char*, int, const char**)’ [-fpermissive]
令我惊讶的是,在这件事上我也找不到任何帮助。This Why can';t我转换';char**';到a';const char*const*';在C中?解决方案不起作用。
所以我想知道:如何将char**传递到constchar**?
完整的功能是
#include <errno.h> // Error number definitions
#include <rrd.h>
#include <wordexp.h>
void splitToArgs(string& parametersString) //parametersString contains space separated words (parameters).
{
wordexp_t we;
int er = 0;
if ( (er=wordexp(parametersString.c_str() , &we, 0)) != 0)
{
cout << "error in word expansion " << er << endl;
}
else
{
if (we.we_wordc>0)
{
char * filename = we.we_wordv[1]; //filename is part of the parameters string
rrd_clear_error();
int ret = rrd_update_r( filename , NULL , we.we_wordc, we.we_wordv );
if ( ret != 0 )
{
cout << "rrd_update error # = " << ret << " error string = " << rrd_get_error() ;
}
}
}
wordfree(&we);
}
const_cast
的这种使用(如果正确)也不适用于
error: invalid conversion from ‘char**’ to ‘const char**’ [-fpermissive]
const char **w = const_cast<char**>(we.we_wordv);
const_cast<const char**>(whatever)
在这种情况下,是const_cast的正确方法。
我将给你一个例子,将一个字符传递给一个枚举(实际上是一个常量)
enum TIngrediente
{
TOMATE,
QUESO,
NATA,
CEBOLLA,
POLLO,
HUEVO,
SALAMI,
ANCHOA,
BACON,
GAMBA
};
string tolower(string s)
{
string r = s;
for (int i = 0; i < s.size(); ++i)
r[i] = tolower(r[i]);
return r;
}
TIngrediente StrToIngrediente(string s)
{
s=tolower(s);
int i;
while (i < INGREDIENTES.size() and INGREDIENTES[i] != s)
++i;
return (TIngrediente)i;
}
现在,您唯一需要做的就是让另一个函数再次从const char更改为char(非常简单)通过这种方式,您将把char常量转换为const char,因为您需要添加一个库、cctype和local来实现这一点。
相关文章:
- 将char*传递给pthread_read函数
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 从函数返回const char*数组
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 将函数参数"const char*"转换为"std::string_view"是
- std::string 构造函数如何处理固定大小的 char[]?
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 构造函数 (C++) 中的 char 指针参数存在问题
- c ++ 如何在构造函数中初始化 char
- C++ 存储来自 char* 函数的字符列表
- 从循环返回char函数数据
- 预处理器检查 constexpr const char* 函数
- 如何使const char*函数起作用
- 返回一个带有随机选项和局部变量的 char 函数
- System::字符串到char*函数.内存泄漏
- 如何在c++中使用递归char *函数来反转字符串
- 如何在c++中创建一个char函数
- Windows与UTF-16一起使用char*函数
- c++在char函数中搜索char