将多个字符串传递给函数从c ++代码到c代码会引发错误

时间:2017-02-19 12:01:12

标签: c++ string struct char-pointer

我有一个结构如下

struct st
{
        std::string name;
        std ::string refer;
        int number;
        std::string path;
};

创建了上述结构的数组

struct st var[5]={{"rick1","ross1",1,"demo1"},
                { "rick2","roos2",2,"demo2" },
                { "rick3","roos3",3,"demo3"},
                {"rick4","roos4,4,"demo4"},
                {"rick5","roos5",5,"demo5"}};

现在我将我的userdefine函数(pass)称为

c ++代码

for(i=0;i<5;i++)
pass(var[i].name.c_str());// how can i pass  name sting to char *?

c code

void pass(char *name) //  implemented in c code so cannot use string
{
cout<<name<<endl;

}

我应该将调用函数(c ++代码)中的字符串类型的名称传递给调用函数(c代码),这是char *类型。我使用c_str()但它会抛出错误。请帮助我谢谢提前

注意:从c ++代码调用pass函数,该函数将字符串作为参数传递给c代码,该代码捕获为char *

1 个答案:

答案 0 :(得分:1)

name.c_str()返回const char*。您不能将const指针作为带有非常量指针的函数的参数传递。

如果你有一个非常新的编译器,你可以使用自{C ++ 17标准以来具有非常量重载的std::string::data()

否则你需要一个const_cast:

pass(const_cast<char*>(var[i].name.c_str()))

我假设传递函数实际上并没有修改字符串。