C++ 文字列における c_str(), data(), copy(p,n) 関数の使用法
2022-02-11 04:30:46
1. c_str():ヌル文字で終端する配列への const char* ポインタを生成する。
引用元: csqlwy - ブログランド
リンク
www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html(末尾をクリックすると元記事が読めます)to go
1) c_str()は文字列へのポインタしか返さないので、今使って最初に変換するか、そのデータをユーザが管理できるメモリにコピーしてください。
int main()
{
const char* c;
string s = "1234";
c = s.c_str();
cout<<c<<endl; //output: 1234
s = "abcd";
cout<<c<<endl; //output: abcd
return 0;
}
int main()
{
char* c=new char[20];
string s="1234";
//c = s.c_str();
strcpy(c,s.c_str());
cout<<c<<endl; //output: 1234
s="abcd";
cout<<c<<endl; //output: 1234
return 0;
}
strcpyなどの関数を使って、必要なデータを別のメモリにコピーすれば、独立したデータになりますね。(推奨)です。
int main( )
{
using namespace std;
string str1 ( "1234567890" );
basic_string <char>::iterator str_Iter;
char array1 [ 20 ] = { 0 };
char array2 [ 10 ] = { 0 };
basic_string <char>:: pointer array1Ptr = array1;
basic_string <char>:: value_type *array2Ptr = array2;
cout << "The original string str1 is: ";
for ( str_Iter = str1.begin( ); str_Iter ! = str1.end( ); str_Iter++ )
cout << *str_Iter;
cout << endl;
basic_string <char>:: size_type nArray1;
// Note: string::copy is potentially unsafe, consider
// using string::_Copy_s instead.
nArray1 = str1.copy ( array1Ptr , 12 ); // C4996
cout << "The number of copied characters in array1 is: "
<< nArray1 << endl;
cout << "The copied characters array1 is: " << array1Ptr << endl;
basic_string <char>:: size_type nArray2;
// Note: string::copy is potentially unsafe, consider
// using string::_Copy_s instead.
nArray2 = str1.copy ( array2Ptr , 5 , 2 ); // C4996
cout << "The number of copied characters in array2 is: "
<< nArray2 << endl;
cout << "The copied characters array2 is: " << array2Ptr << endl;
}
<イグ
c_str()は、クライアントプログラムが読み取り可能な、文字の配列への変更不可能なポインタを返し、手動でポインタを解放または削除する必要はありません。
data():c_str()と似ているが、返される配列はヌル文字で終端しない。
3. copy(p,n,size_type _Off = 0)
: 文字列型のオブジェクトから、文字ポインタ p が指す空間に最大 n 文字をコピーします。デフォルトでは最初の文字から始めますが、どこから始めるかを指定することもできます (0 から始めることを忘れないでください)。オブジェクトからコピーされた実際の文字が返されます。ユーザは、p が指す空間が n 文字を保持するのに十分であることを確認する。
(サイズタイプ _Off で開始し、p に n 文字を代入する)
int main( )
{
using namespace std;
string str1 ( "1234567890" );
basic_string <char>::iterator str_Iter;
char array1 [ 20 ] = { 0 };
char array2 [ 10 ] = { 0 };
basic_string <char>:: pointer array1Ptr = array1;
basic_string <char>:: value_type *array2Ptr = array2;
cout << "The original string str1 is: ";
for ( str_Iter = str1.begin( ); str_Iter ! = str1.end( ); str_Iter++ )
cout << *str_Iter;
cout << endl;
basic_string <char>:: size_type nArray1;
// Note: string::copy is potentially unsafe, consider
// using string::_Copy_s instead.
nArray1 = str1.copy ( array1Ptr , 12 ); // C4996
cout << "The number of copied characters in array1 is: "
<< nArray1 << endl;
cout << "The copied characters array1 is: " << array1Ptr << endl;
basic_string <char>:: size_type nArray2;
// Note: string::copy is potentially unsafe, consider
// using string::_Copy_s instead.
nArray2 = str1.copy ( array2Ptr , 5 , 2 ); // C4996
cout << "The number of copied characters in array2 is: "
<< nArray2 << endl;
cout << "The copied characters array2 is: " << array2Ptr << endl;
}
<イグ
関連
-
Linux の 'pthread_create' への未定義参照問題を解決しました。
-
C++11での移動セマンティクス(std::move)と完全な前進(std::forward)。
-
C++がpythonを呼び出す
-
c++ std::move Principle の実装と使用法のまとめ
-
vs2015 はソースファイル stdio.h を見つけることができない 解決策
-
C++: エラー C2228: '.str' の左側にはクラス/構造体/結合が必要
-
sort(...)」への呼び出しに対応する関数がない、エラー
-
C++テンプレートテンプレート使用法まとめ
-
c++ベクトル使用集
-
C++ inet_pton, inet_ntop 関数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C++:ソースファイルを開くことができない問題
-
C++のostreamの詳細な使用方法
-
c++11の機能を含むcmakeの書き方 (-std=c++11 cmakeList.txtに書き込む方法)
-
void* から char* への無効な変換」および「文字列定数から 'char*' への非推奨の変換」を解決 "
-
C++ [エラー] 'std::string {aka std::basic_string<char>}' を 'char*' に変換できないエラー
-
警告を表示します。ISO C++は文字列定数を'char*'に変換することを禁じています[-Write-strings]。
-
c++ experience summary(1):linux c compile with warning: assign makes pointer from integer without cast reason.
-
munmap_chunk():不正なポインタとSegmentation faultのバグを解決。
-
C/C++ におけるランダム関数 rand() および srand() の使用法
-
c++ 11 random ライブラリの簡単な使い方