Форум программистов, компьютерный форум CyberForum.ru

Определение размера char** argv - C++

Восстановить пароль Регистрация
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
07.07.2015, 15:06     Определение размера char** argv #1
Есть массив строк char** argv где я знаю число строк argc
C++
1
2
3
4
for (int i = 0; i < argc; i++){
                 printf("%s \n",argv[i]);
            }
char** newargv;
Как скопировать argv с помощью memcpy ( &newargv, &argv, sizeof(newargv) );?
sizeof(newargv) вернет мне 4, как я понимаю (размер указателя), как определить размер всего копируемого массива?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2015, 15:06     Определение размера char** argv
Посмотрите здесь:

Что есть argc и **argv в функции int main(int argc, char **argv)? C++
C++ Аргументы main(int argc, char *argv[])
C++ Отличие char *argv[] от char ** argv
C++ Определение размера файла
C++ Подскажите пожалуйста с int main(int argc, char*argv[])
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Velesthau
523 / 425 / 129
Регистрация: 25.11.2014
Сообщений: 1,662
07.07.2015, 15:11     Определение размера char** argv #2
Размер копируемого массива - это argc (+ null в конце). По-другому ты его не определишь. Копируй либо указатели в новый массив указателей, либо выделяй память под каждую строку, и копируй строки из argv в выделеные буферы.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
07.07.2015, 15:12  [ТС]     Определение размера char** argv #3
Можно сделать так?
C++
1
2
3
4
5
6
7
8
9
10
11
MyCopy(void* _argc, void* _argv)
    {
char** argv;        
argc = *(int*)_argc;
        int size = 0;
        for (int i = 0; i < argc; i++)
        {
            size += strlen((char*)((char**)_argv)[i])+1;
        }
        memcpy(&argv, _argv, size);
    }
Enno
265 / 168 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
07.07.2015, 15:19     Определение размера char** argv #4
Начнём с того что argv это указатель на указатели. Следовательно залпом его копировать нельзя (вероятность совпадения последовательного расположения указуемых элементов отбросим). Значит выделяем место под argc указателей и потом в каждый указатель копируем (с выделением места) указуемый элемент.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
07.07.2015, 15:23  [ТС]     Определение размера char** argv #5
неужели нельзя как-то по простому скопировать? Мне функция возвращает char** argv и int argc (количество), а я хочу скопировать себе эти строки в свою переменную
Velesthau
523 / 425 / 129
Регистрация: 25.11.2014
Сообщений: 1,662
07.07.2015, 15:28     Определение размера char** argv #6
Цитата Сообщение от klynxe Посмотреть сообщение
неужели нельзя как-то по простому скопировать?
Нельзя.
Цитата Сообщение от klynxe Посмотреть сообщение
а я хочу скопировать себе эти строки в свою переменную
Если хочешь скопировать строки, от выдели память под каждую строку, и скопируй каждую строку. Массив из таких новых указателей на выделенные буферы и будет скопированным argv.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.07.2015, 15:43     Определение размера char** argv #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <string>
 
template < typename T >
std::ostream & operator << ( std::ostream & stream , const std::vector<T> & vec )
{
    for ( typename std::vector<T>::const_iterator it = vec.begin() , itEnd = vec.end() ; it != itEnd ; ++it )
        stream << *it << '\n' ;
    return stream ;
}
 
int main( int argc , char ** argv )
{
    std::vector < std::string > vec ( argv , argv+argc ) ; //И все параметры в векторе
    std::cout << vec << std::endl ;
}
Enno
265 / 168 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
07.07.2015, 15:45     Определение размера char** argv #8
Цитата Сообщение от klynxe Посмотреть сообщение
строки в свою переменную
Ты хочешь несколько строк скопировать в одну или что другое?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 19:37     Определение размера char** argv
Еще ссылки по теме:

C++ Определение размера массива
что такое int argc, char *argv[] в качестве параметров главной (main) функции? C++
C++ Определение размера массива

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 537
07.07.2015, 19:37  [ТС]     Определение размера char** argv #9
Цитата Сообщение от Enno Посмотреть сообщение
Ты хочешь несколько строк скопировать в одну или что другое?
Нет, функция работы с бд возвращает результат в виде выше, и мне нужно сохранить этот результат себе в класс, пока я не вышел из функции и соответственно мои переменные еще живы.
Yandex
Объявления
07.07.2015, 19:37     Определение размера char** argv
Ответ Создать тему
Опции темы

Текущее время: 02:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru