Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
klynxe
11 / 11 / 4
Регистрация: 07.09.2012
Сообщений: 542
1

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

07.07.2015, 15:06. Просмотров 476. Ответов 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[] от char ** argv
Подскажите отличие между int main(int argc, char *argv) { //.... } и ...

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

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

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

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е...

8
Velesthau
524 / 426 / 159
Регистрация: 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 / 40
Регистрация: 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
524 / 426 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
07.07.2015, 15:28 6
Цитата Сообщение от klynxe Посмотреть сообщение
неужели нельзя как-то по простому скопировать?
Нельзя.
Цитата Сообщение от klynxe Посмотреть сообщение
а я хочу скопировать себе эти строки в свою переменную
Если хочешь скопировать строки, от выдели память под каждую строку, и скопируй каждую строку. Массив из таких новых указателей на выделенные буферы и будет скопированным argv.
1
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 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 / 40
Регистрация: 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

Непонятное определение char
Что происходит в этих двух строках. В первой всё понятно, а вот во второй......

Определение номера определенного символа в char
Всем привет! Нужна помощь. Имеем такой массив символов: char alphabet = {'a',...

Определение размера файла
Здравствуйте, я учусь на программиста, нужна помощь в программе. #include...


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

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

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