2012-04-06 2 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
+1

I второй том. Если по какой-то особой причине (т.е. обратная совместимость, производительность и т. Д.) Причина char * используется в c или очень низком уровне кода C++ (сопряжение с c кодом?). std :: string лучше. – ervinbosenbacher

Смежные вопросы