С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

07.07.2015, 15:06. Просмотров 347. Ответов 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, как я понимаю (размер указателя), как определить размер всего копируемого массива?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2015, 15:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение размера char** argv (C++):

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

Что есть argc и **argv в функции int main(int argc, char **argv)? - C++
Здраствуйте, уважаемые кодеры! Что означает argc и **argv в функции int main(int argc, char **argv), ни как не могу понять эти переменные...

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

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

Подскажите пожалуйста с int main(int argc, char*argv[]) - C++
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то программе передан хотя бы один аргумент, если...

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

8
Velesthau
523 / 425 / 129
Регистрация: 25.11.2014
Сообщений: 1,662
07.07.2015, 15:11 #2
Размер копируемого массива - это argc (+ null в конце). По-другому ты его не определишь. Копируй либо указатели в новый массив указателей, либо выделяй память под каждую строку, и копируй строки из argv в выделеные буферы.
0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
07.07.2015, 15:12  [ТС] #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);
    }
0
Enno
267 / 170 / 38
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
07.07.2015, 15:19 #4
Начнём с того что argv это указатель на указатели. Следовательно залпом его копировать нельзя (вероятность совпадения последовательного расположения указуемых элементов отбросим). Значит выделяем место под argc указателей и потом в каждый указатель копируем (с выделением места) указуемый элемент.
0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
07.07.2015, 15:23  [ТС] #5
неужели нельзя как-то по простому скопировать? Мне функция возвращает char** argv и int argc (количество), а я хочу скопировать себе эти строки в свою переменную
0
Velesthau
523 / 425 / 129
Регистрация: 25.11.2014
Сообщений: 1,662
07.07.2015, 15:28 #6
Цитата Сообщение от klynxe Посмотреть сообщение
неужели нельзя как-то по простому скопировать?
Нельзя.
Цитата Сообщение от klynxe Посмотреть сообщение
а я хочу скопировать себе эти строки в свою переменную
Если хочешь скопировать строки, от выдели память под каждую строку, и скопируй каждую строку. Массив из таких новых указателей на выделенные буферы и будет скопированным argv.
1
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
07.07.2015, 15:43 #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 ;
}
0
Enno
267 / 170 / 38
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
07.07.2015, 15:45 #8
Цитата Сообщение от klynxe Посмотреть сообщение
строки в свою переменную
Ты хочешь несколько строк скопировать в одну или что другое?
0
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
07.07.2015, 19:37  [ТС] #9
Цитата Сообщение от Enno Посмотреть сообщение
Ты хочешь несколько строк скопировать в одну или что другое?
Нет, функция работы с бд возвращает результат в виде выше, и мне нужно сохранить этот результат себе в класс, пока я не вышел из функции и соответственно мои переменные еще живы.
0
07.07.2015, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 19:37
Привет! Вот еще темы с ответами:

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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