1

ループから char* 値をキューに割り当てようとしています。データ自体を割り当てるのではなく、ポインターをコピーし続けます。簡単な答えがあるような気がしますが、良い例が見つかりません。

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

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

4

1 に答える 1

5

std::queue<std::string>代わりに andを使用std::stringして、文字列を保持します。

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

何らかの理由で a を使用できない場合std::string(ただし、単純な場合に適したものは考えられません)、次のことを行う必要があります。

  1. 文字列の長さを取得します (たとえば、 を使用strnlen)。
  2. そのサイズの新しい char 配列を割り当てます
  3. 現在の場所からコンテンツをコピーし、満たされた配列のポインターをキューにプッシュします。
  4. キューから取り出すときは、2 で割り当てた配列を解放することを覚えておく必要があります。
于 2012-04-06T21:21:11.443 に答える