2014-11-14 4 views
-1

У меня в основном есть динамический массив символов, в котором хранятся имена и объявлены как char **names.Возвращение динамического массива char ** C++

У меня есть переменная, называемая namesnumber, которая используется для установки размера массива names.

Например,

namesnumbers = 5 
names = new char*[namesnumbers]; 
for (int i=0; i<namesnumbers; i++) 
{ 
    names[i] = new char[65]; 
    strcpy(names[i], actualName); 
} 
names = {Mike, Sam, Mark, Bill, George} 

Это мой метод возврата, однако он только возвращает адрес памяти, а не фактическое namess

const char** getNames() 
{ 
    return names; 
} 

Я хочу, чтобы мой getNames() способ вернуть 5 имен.

+8

Использование станд :: струнные и станд :: вектор или станд :: массив. – Ben

+5

Почему вы используете строки стиля C и выделение памяти в программе на C++? Используйте std :: string и std :: vector и сохраняйте много горя. –

+0

У вас есть адрес в том месте, где хранятся имена, вы должны разыменовать его, чтобы получить имена –

ответ

2
// namesnumbers = 5 
names = new char*[namesnumbers]; 
for (int i=0; i<namesnumbers; i++) 
{ 
    names[i] = new char[65]; 
    strcpy(names[i], actualName); 
} 
// names = {Mike, Sam, Mark, Bill, George} 

Эквивалентная инициализация с использованием станд библиотеки:

  • отдельно от конкретизации:

    std::vector<std::string> names; 
    for(const auto& n: actualNames) // actualNames assumed to be an array 
        names.push_back(n); 
    
  • в конкретизации:

    std::vector<std::string> names = { "Mike", "Sam", "Mark", "Bill", "George" }; 
    
  • возвращение т он пять имен:

    const std::vector<std::string>& getNames() 
    { 
        return names; 
    } 
    
+0

Спасибо, а как насчет того, чтобы не использовать вектор? Просто разыменование массива? –

+0

@RewsProg Вы не можете разыменовывать массив. Массивы не являются указателями. Указатели не являются массивами. – molbdnilo

+0

Что вы видите в фрагменте кода, который вы цитируете в начале вашего ответа? Я вижу беспорядок, который даже не компилируется, независимо от какой-либо области, которую вы можете попытаться построить. Таким образом, ваша * Эквивалентная инициализация с использованием * должна быть ошибкой. (извините: -1) – Wolf