日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C++ 中c_str()函数

發布時間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 C++ 中c_str()函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:

1.https://blog.csdn.net/chaipp0607/article/details/75371149

2.https://blog.csdn.net/JIEJINQUANIL/article/details/51547027

先舉個例子說明一下:

atoi()是C語言中的字符串轉換成整型數的一個函數,在例子的代碼里面會用到,其函數原型為:

int atoi(const char *nptr);

下面是一個C語言的代碼,可以正常運行:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char *str = "123";
int num = atoi(str);
printf("%d
",num);
getchar();
return 0;
}

但是在C語言中使用字符串遠遠沒有C++方便,畢竟C++提供了string類,把代碼改成C++版:

//這是個錯誤的代碼
#include <iostream>
#include <string>

using namespace std;

int main()
{
string str ="123";
int num = atoi(str);
cout<<num<<endl;
getchar();
return 0;
}

此時代碼會報錯,因為string與const char類型是不符的,前面提到,atoi()是C語言提供的函數,而C語言中沒有string類,字符串使用char指針來實現的。

C與C++本身就是一家,為了讓它們在一定程度上可以通用,就有了.c_str()函數。我們只需要把代碼修改成這樣:

//這是個正確的代碼
#include <iostream>
#include <string>

using namespace std;

int main()
{
string str ="123";
int num = atoi(str.c_str());
cout<<num<<endl;
getchar();
return 0;
}

就是在string類型的str后面加上了.c_str()函數,這也就是.c_str()的作用:
.c_str()函數返回一個指向正規C字符串的指針常量, 內容與本string串相同。因為string類本身只是一個C++語言的封裝,

其實它的string對象內部真正的還是char緩沖區,所以.c_str()指向了這個緩沖區并返回const。

const _Elem *c_str() const
{ // return pointer to null-terminated nonmutable array
return (_Myptr());
}

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

1、標準庫的string類提供了3個成員函數來從一個string得到c類型的字符數組:c_str()、data()、copy(p,n)。

2、c_str()是Borland封裝的String類中的一個函數,它返回當前字符串的首字符地址。換種說法,c_str()函數返回一個指向正規C字符串的指針常量,內容與本string串相同。這是為了與C語言兼容,在C語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string對象轉換成C中的字符串樣式。

3、c_str()的原型是:const char*c_str()const;

4、c_str()生成一個const char*指針,指向以空字符終止的數組。(data()與c_str()類似,但是返回的數組不以空字符終止。)

5、注意:一定要使用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());
6、如果一個函數要求char*參數,可以使用c_str()方法。
7、copy(p,n,size_type _Off = 0):從string類型對象中至多復制n個字符到字符指針p指向的空間中。默認從首字符開始,但是也可以指定,開始的位置(記住從0開始)。返回真正從對象中復制的字符。第三個參數可以缺省。以下代碼顯示了copy()函數的用法:

string str ("Please split this phrase into tokens");
basic_string <char>:: size_type cc;
char arr[20] = {0};
basic_string <char>:: pointer arrayPtr = arr;
cc = str.copy(arrayPtr,10);
cout << "The number of copied characters in cc is: "<< cc << endl;
cout << "The copied characters array1 is: " << arrayPtr << endl;

總結

以上是生活随笔為你收集整理的C++ 中c_str()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。