C++中的C_str()函數用法


先來看一個栗子吧。

#include"iostream"

std::string info_extend;

void main()
{
//std::cout << "printsomething:  " <<info_extend << std::endl;//ERROR!!
std::cout << "printsomething:  " << info_extend.c_str() << std::endl;
}

注釋掉的部分會出現錯誤:

2 IntelliSense: 沒有與這些操作數匹配的 "<<" 運算符
操作數類型為: std::basic_ostream<char, std::char_traits<char>> << std::string c:\Users\Administrator\Documents\Visual Studio 2013\Projects\博客\智能指針的使用\智能指針的使用\main.cpp 17 36 智能指針的使用

 

因為我們沒有包含頭文件 #include “string”,所以 沒有重載運算符<<,從而導致了錯誤。

解決的方法有兩種:

1.用c_str()函數,下面詳細介紹。

2.包含頭文件"string"

 

下面我們進入正題,請出我們的今天的主角  c_str()    他是一個函數哦。。。不要忘記了括號。。

語法: 
const char *c_str();
c_str()函數返回一個指向正規C字符串的指針常量, 內容與本string串相同. 
這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。
注意:一定要使用strcpy()函數 等來操作方法c_str()返回的指針 
比如:最好不要這樣: 
char* c; 
string s="1234"; 
c = s.c_str(); //c最后指向的內容是垃圾,因為s對象被析構,其內容被處理,同時,編譯器也將報錯——將一個const char *賦與一個char *。

應該這樣用: 
char c[20]; 
string s="1234"; 
strcpy(c,s.c_str()); 
這樣才不會出錯,c_str()返回的是一個臨時指針,不能對其進行操作

再舉個例子
c_str() 以 char* 形式傳回 string 內含字符串
如果一個函數要求char*參數,可以使用c_str()方法: 
string s = "Hello World!";
printf("%s", s.c_str()); //輸出 "Hello World!"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM