Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как выделить память через new под объект char*[] ?


Автор: neosapient 22.7.2019, 22:52
Здравствуйте.

Посмотрите на второй параметр для функции main:

int main(int argc, char *argv[])
{
    return -1;
}

Как мне создать соответствующий объект? Как через оператор new выделить память? 
И как потом записать его в качестве возвращаемого параметра.


Глобальная задача - создать класс Arg и инициализировать его. A затем через метод Arg::Argv() возвращать указатель на буфер, аналогичный второму параметру из main(). Набросок кода:
Код

class Arg
{
    int m_argc;
    char* m_argv[];

    Arg(int argc, char *argv[])
      : m_argc(argc)
    {
      m_argv = new (char[]);  // <--- тут надо правильно записать выделение памяти
      for(int i =0; i<argc; i++;){
        int len = strlen(argv);
        m_argv[i] = new char[len +1];
        strncpy(m_argv[i], argv[i], len);
        m_argv[i][len]='\0';
      }
    }

    int Argc()
    { return m_argc; }

    char *[] Argv()  // <--- тут надо правильно записать возврат указателя, 
    { return m_argv; }  //  <--- аналогичный второму параметру main()
};

Спасибо.

Автор: Romikgy 23.7.2019, 09:41
Цитата(neosapient @  22.7.2019,  21:52 Найти цитируемый пост)
m_argv = new (char[]);  // <--- тут надо правильно записать выделение памяти

Код

m_argv = new (char*)[argc];

Цитата(neosapient @  22.7.2019,  21:52 Найти цитируемый пост)
  char *[] Argv()  // <--- тут надо правильно записать возврат указателя, 

Код

char ** Argv() 

Автор: neosapient 23.7.2019, 14:12
Romikgy, спасибо, получилось.

Код

class Arg
{
    int m_argc;
    char** m_argv;
public:
    Arg(int argc, char *argv[])
        : m_argc(argc)
    {
        typedef char*  pchar;
        m_argv = new pchar[argc];  // <--- тут надо правильно записать выделение памяти
        for(int i =0; i<argc; i++){
            int len = strlen(argv[i]);
            m_argv[i] = new char[len +1];
            strncpy(m_argv[i], argv[i], len);
            m_argv[i][len]='\0';
        }
    }

    int Argc()
    { return m_argc; }

    char ** Argv()  // <--- тут надо правильно записать возврат указателя, 
    { return m_argv; }  //  <--- аналогичный второму параметру main()
};


void show(int argc, char* argv[])
{
    for(int i =0; i<argc; i++){
        printf("%s\n", argv[i]);
    }
}

int main(int argc, char* argv[])
{
    Arg arg(argc, argv);
    show(arg.Argc(), arg.Argv());
    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)