標準庫的string類提供了3個成員函數來從一個string得到c類型的字符數組:c_str()、data()、copy(p,n)。
- c_str()是Borland封裝的String類中的一個函數,它返回當前字符串的首字符地址。換種說法,c_str()函數返回一個指向正規C字符串的常量指針(不是指針常量,注意其區別),內容與本string串相同。這是為了與C語言兼容,在C語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string對象轉換成C中的字符串樣式。
- c_str()的原型是:const char*c_str() const;
- c_str()生成一個const char*指針,指向以空字符終止的數組。而data()與c_str()類似,但是返回的數組不以空字符終止。
- 注意:一定要使用strcpy()等函數來操作c_str()返回的指針。例如下面這樣寫就是錯誤的。
char* c;
string s="1234";
c = s.c_str();
上述代碼中,c最后指向的內容是垃圾,因為s對象被析構,其內容被處理,同時編譯器將會報錯。正確代碼如下:
char *cstr,*p;
string str ("Please split this phrase into tokens");
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
疑惑(待解決)
上面的沒有完全理解。本人是在學習ROS的過程中遇到的,好像是因為定義的時候用的std_msgs,所以需要用c_str()
參考:
https://zhuanlan.zhihu.com/p/166169343