Передача нескольких строк в функцию из кода C++ в код c вызывает ошибку

У меня есть структура, как показано ниже

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"}};

Теперь я назвал свою пользовательскую функцию (pass) как

С++ код

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

c-код

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

}

Я должен передать имя строкового типа в вызывающей функции (код c++) в вызываемую функцию (код c), которая имеет тип char *. Я использую c_str(), но это выдает ошибку. Пожалуйста, помогите мне, спасибо заранее

Примечание: функция pass вызывается из кода C++, который передает строку в качестве аргумента в код C, который перехватывает как char *


person leuage    schedule 19.02.2017    source источник
comment
Прочтите этот c_str справочник. Обратите внимание на то, какой тип он возвращает.   -  person Some programmer dude    schedule 19.02.2017
comment
Если это ваша определяемая пользователем функция, определите ее правильно, то есть с параметром std::string&. Обратите внимание, что в *новом* c++11 у вас есть std::string::data.   -  person LogicStuff    schedule 19.02.2017
comment
@Biffen OP тогда использовал бы char const*, и не было бы вопроса.   -  person LogicStuff    schedule 19.02.2017
comment
Меня просто смущает это неправильный выбор, так как char * будет продолжать меняться в моем случае. Хочет ли ОП изменить его?   -  person LogicStuff    schedule 19.02.2017
comment
@LogicStuff спасибо за ответ. я не могу изменить определение функции, так как это код C и вызов m из кода C++   -  person leuage    schedule 19.02.2017


Ответы (1)


name.c_str() возвращает const char*. Вы не можете передать константный указатель в качестве аргумента функции, принимающей неконстантный указатель.

Если у вас очень свежий компилятор, вы можете использовать std::string ::data(), которая имеет неконстантную перегрузку, начиная со стандарта C++17.

В противном случае вам понадобится const_cast:

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

Я предполагаю, что функция передачи на самом деле не изменяет строку.

person zett42    schedule 19.02.2017