![](/img/trans.png)
[英]C complains about passing char** value to function taking char const*const*const but C++ doesn't
[英]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
作為第3和第4個參數。
即使我為此項目使用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]
令我驚訝的是,在這件事上我也找不到任何幫助。 這為什么我不能在C語言中將'char **'轉換為'const char * const *'? 解決方案不起作用。
所以我想知道:如何將char **傳遞給const char **?
完整功能是
#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的正確方法。
我將給您一個將char傳遞給枚舉的示例(實際上是一個常量)
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來進行創建這項工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.