2017-02-19 90 views
0

我有一個結構如下從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"}}; 

現在我打電話給我userdefine函數(通)作爲

C++代碼

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(),但它拋出型.I米錯誤。請幫助我在此先感謝

注:通功能是從C哪個傳遞字符串作爲參數傳遞到C代碼趕上爲char *

+1

請閱讀[this'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())) 

我這裏假設通功能實際上並沒有修改字符串。