5

質問:

  • 次の違いは何ですか:

    • vector<string>そしてvector<char *>
  • stringdata type: の値を具体的に受け入れる関数に渡すにはどうすればよいですか:

    • const char *?

たとえば: _

 vector<string> args(argv, argv + argc);

 vector<string>::iterator i;

 void foo (const char *); //*i
  • 使用を理解してvector<char *>います:データとポインターをコピーする必要があります

編集:

ご意見ありがとうございます。

4

7 に答える 7

17

これは特にベクトルとは何の関係もありません。

Achar*はポインタであり、有効な文字列データを指している場合と指していない場合があります。

Astd::stringは文字列クラスであり、文字列を構成するすべての必要なデータと、割り当ておよび割り当て解除機能をカプセル化しています。

をベクトルまたは他の場所に保存std::stringすると、すべてが機能します。

char ポインターを格納する場合は、メモリの割り当てと解放、ポインターが意味のある文字列データのみを指すようにすること、文字列の長さなどを決定することなど、すべての困難な作業を行う必要があります。

char*多くの C API と C++ 標準ライブラリの一部で期待されているため、stringクラスにはc_str()を返す関数がありますchar*

于 2009-02-15T00:22:45.280 に答える
3

char*は実際には type の値へのポインタであり、その値でchar何ができるか、何ができないかを定義します。を作成し、この値が格納されているメモリ ブロックへのポインタを参照すると、それが であると想定され、int* numberそのメモリ ブロックの型がロックされます。ただし、そのメモリ ブロックに を格納することはできますが、その でこれらの関数を実行できないと表示されるため、コンパイル エラーがスローされます。numberintchar 'C'intchar

于 2010-12-21T07:48:59.360 に答える
3

stringを期待するものにa を渡すには、null で終わる文字列を返す'sメンバーconst char *を使用します。stringc_str()

string s = "foobar";

int n = strlen( s.c_str() );
于 2009-02-15T00:20:11.090 に答える
1
foo(i->c_str());
于 2009-02-15T00:18:29.753 に答える
1

http://www.cplusplus.com/reference/string/string/から:

文字列オブジェクトは、一連の文字を操作するように特別に設計された特別な種類のコンテナーです。

メモリ配列内の単なる文字列である従来の c-string とは異なり、C++ 文字列オブジェクトは、より直感的な方法で文字列を操作するための多くの組み込み機能と、C++ コンテナーに共通するいくつかの追加の便利な機能を備えたクラスに属します。

char*文字へのポインタであり、それ以上のものではありません。

c_str()として必要なデータを渡すために を使用できますconst char*

コピーに関しては、データをコピーすると、文字列の新しい場所が作成されるため、新しいポインターが作成されます。

于 2009-02-15T00:20:31.417 に答える
1

を使用しますがvector< string >、これは、検索がアドレス ベースではなく値ベースになるためです。ただし、vector< char* >高速になるため、それぞれに利点があります。

于 2009-02-15T00:27:35.767 に答える
0

vector<char *> 悪い考えのように聞こえます!! プログラムがメモリ制限のあるシステムで実行されていない限り。

于 2013-03-21T09:01:25.730 に答える