【发布时间】:2014-02-28 11:46:44
【问题描述】:
我正在尝试从 C++ 调用 C 库。该接口需要char* []。如果我通过const char * [],编译将失败。
如何安全地创建其中之一? 这是我能做的最好的,但我不知道它是否正确。我正在创建仅包含 1 个 c 字符串的数组。
string attr = "memberUid";
vector<char> attr_v(attr.begin(), attr.end());
attr_v.push_back('\0');
char * attrs[] = {&attr_v[0]};
我不想触发已弃用的转换警告,即触发以下内容的警告:
char * attr = "memberUid";
【问题讨论】:
-
constness and pointers to pointers 的可能重复项……请注意,
char *[]作为函数参数是char **的同义词。 -
char attr[] = "memberUid"; char *attrs[] = { attr }; -
WhozCraig,那行得通,为什么 char * attr = "memberUid" 算作已弃用的转换,但 char attr[] 不算?他们不是都只是设置一个char数组缓冲区吗?
-
您尝试调用的 C 函数是否修改了您传递给它的字符串?如果是这样,我觉得 WhozCraig 的评论很好。如果没有,我会使用从字符串文字到
char *的显式转换。 -
顺便说一句,OP 的解决方案有效。