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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 538
#1

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

07.07.2015, 15:06. Просмотров 286. Ответов 8
Метки нет (Все метки)

Есть массив строк 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
Посмотрите здесь:

Отличие char *argv[] от char ** argv - C++
Подскажите отличие между int main(int argc, char *argv) { //.... } и int main(int argc, char** argv) { //.... }

Аргументы main(int argc, char *argv[]) - C++
Эксперты в с++,объясните пожалуйста новичку примерно понял как использовать эти аргументы,но не как не могу понять куда писать то что он...

Определение номера определенного символа в char - C++
Всем привет! Нужна помощь. Имеем такой массив символов: char alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',...

Определение размера массива - C++
Привет всем у меня несколько вопросов по языку си (компилятор gcc). 1) Есть, например след код: char* sym; char c = 'a'; ...

Определение размера массива - C++
Код: template &lt;class T,int N&gt; int arr_sz(T (&amp;arr)) {return N;} void sum(int a){cout&lt;&lt;a;}; int main() {

Определение размера файла - C++
Здравствуйте, я учусь на программиста, нужна помощь в программе. #include &lt;fstream.h&gt; #include &lt;windows.h&gt; #include &lt;iostream&gt; ...

Массив char, случайного размера, заполнить случайными значениями - C++
Как заполнить его я понял. Но создать рандомно не получается. Пишет, что обязательно нужна константа. Как быть?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Сообщений: 538
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
266 / 169 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
07.07.2015, 15:19     Определение размера char** argv #4
Начнём с того что argv это указатель на указатели. Следовательно залпом его копировать нельзя (вероятность совпадения последовательного расположения указуемых элементов отбросим). Значит выделяем место под argc указателей и потом в каждый указатель копируем (с выделением места) указуемый элемент.
klynxe
10 / 10 / 4
Регистрация: 07.09.2012
Сообщений: 538
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
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
266 / 169 / 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
Еще ссылки по теме:

Определение размера массива + sizeof - C++
Массив из 6 чисел: sizeof возвращает 24 байта. Тот же массив вызван функцией возвращает только 4 байта. #include &lt;iostream&gt; using...

Определение размера массива в функции - C++
Всем доброго дня ! Подскажите пожалуйста, как можно определить размер массива в функции ? запись int n = sizeof(a)/sizeof(int);...

Определение размера одномерного массива - C++
Добрый день. Необходимо задать размер одномерного массива. В цикле for стоит переменная - счетчик, которая увеличивается на единицу при...

Определение размера динамического массива - C++
Вопрос может не много глупый, но я подзабыл с. Считаю размер динамического массива и результат получается неверный, логическую ошибку...

Преобразование числа в символ и определение размера, - C++
Вот что я написал: #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; void main() { const int n=5; int M={8,2,3,4,5}; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru