2012-04-06 15 views
1

ループからキューにchar *値を割り当てようとしています。私はデータ自体を割り当てるのではなく、ポインタをコピーし続けます。私は単純な答えがあるように感じますが、良い例を見つけることはできません。C/C++ std :: queueへの値割り当て<char*>

while(something) { 
    next = queue.front(); 
    queue.pop(); 
    while(something) { 
     /* do work */ 
     /* text has new value of char* */ 
     queue.push(text); 
    } 
} 

私はテキストに新しい値を割り当てるときに、キュー内のすべてのエントリがその新しい値になるように、これは、明らかに、動作しません。私は適切なコピー/割り当てを行う方法を知る必要があります。

答えて

5

代わりにstd::queue<std::string>を使用し、文字列を保持するためにstd::stringを使用してください。

どこかからchar *を取得している場合は、それをタイプstd::queue<std::string>のキューにプッシュすると、暗黙的に文字列が構築されます。

あなたは(私は単純なケースのためにあらゆる良いものを考えることができない、が)何らかの理由でstd::stringを使用できない場合は、あなたが持っている:

  1. は(strnlenと例えば)文字列の長さを取得します。
  2. そのサイズの新しい文字配列を割り当てます。
  3. 現在の場所から内容をコピーし、塗りつぶした配列のポインタをキューに押します。
  4. 2番目2.
+1

私はそれに割り当てられた配列を解放について覚えているキューから撤退。何らかの特別な理由(すなわち、下位互換性、性能など)を理由にchar *がcまたは非常に低レベルのC++コード(Cコードとのインタフェース?)で使用されていない限り。 std :: stringが優れています。 – ervinbosenbacher

関連する問題