2017-02-19 16 views
0

у меня есть-структура, как показано нижеПередача несколько строки в зависимости от 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"}}; 

Теперь я назвал моим userdefine функция (проход) в

C++ код

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

с кодом

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

} 

я м должен передать имя, которое является типом строки в вызове функции (с ++ кода) к вызываемой функции (с кодом), который является символом * Типа .I м с помощью c_str(), но бросить ошибка .Please помочь мне заранее спасибо

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

+1

Пожалуйста, прочтите [эту ссылку 'c_str'] (http://en.cppreference.com/w/cpp/string/basic_string/c_str). Обратите внимание, какой тип он возвращает. –

+1

Если это * ваша пользовательская функция *, определите ее правильно, то есть с параметром 'std :: string &'. Обратите внимание, что в \ * new \ * C++ 11 у вас есть 'std :: string :: data'. – LogicStuff

+0

@Biffen OP будет использовать 'char const *', и не было бы вопроса. – LogicStuff

ответ

1

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

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

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

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

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