Форум программистов CodeGuru
17 Январь 2018, 22:00:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Копирование массивов  (Прочитано 3481 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ATAMAN200
Интересующийся
**
Офлайн Офлайн

Сообщений: 29


Просмотр профиля
« : 24 Октябрь 2010, 18:49:24 »

Надо скопировать массив

Код:
int bbb[] = {645,998,333}

в массив

Код:
int aaa[] = {4,2,6}

вот код

Код:
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include "string.h"
using namespace std;
int aaa[] = {4,2,6}, bbb[] = {645,998,333}, c;
int main()
{
memmove(aaa, bbb, sizeof(aaa));
for(aaa[c]; c < sizeof(aaa)/sizeof(*aaa); c++)
{
cout << aaa[c] << endl;
}
getch();
}
когда происходит копирование то значения массива bbb перезаписывает значения массива aaa.
Как добавить значения массива bbb к массиву aaa не терея данныи в aaa 
       
Записан
c-coder
Пользователь
***
Офлайн Офлайн

Сообщений: 110


Просмотр профиля
« Ответ #1 : 24 Октябрь 2010, 20:51:56 »

Конечно перезаписывает !
А так не должен.
Код:
int aaa[] = {4,2,6,0,0,0};
bbb[] = {645,998,333};
memmove(&aaa[3], bbb, sizeof(bbb));
Записан
ATAMAN200
Интересующийся
**
Офлайн Офлайн

Сообщений: 29


Просмотр профиля
« Ответ #2 : 24 Октябрь 2010, 20:58:06 »

исправил вот
Код:
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include "string.h"
using namespace std;
int a[] = {4,2,6}, b[] = {645,998,333}, c;
int main()
{
memmove(&a[3], b, sizeof(b));
for(a[c]; c < sizeof(a)/sizeof(*a); c++)
{
cout << a[c] << endl;
}
getch();
}

но результат не дал этот способ теперь выводит просто массив int a[] = {4,2,6}  Грустный
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 24 Октябрь 2010, 21:49:39 »

Походу размер массива aaa - 3 элемента, поэтому цикл крутится по ним. А данные копируются уже за пределы массива aaa.

Кстати, а программа не падает ?
А то если делать как написано (т.е. aaa из 3-х элементов), то получается копирование данных bbb за пределы массива aaa. А массив-то статический. Странно, если не падает. Прога под дос ?

И еще. Я бы сделал лучше выделение массива динамически (в зависимости от размеров данных в a и b) и копировал бы туда оба массива. Т.е. как то так:

Код:
int a[] = {4,2,6};
int b[] = {645,998,333};

int *paResult = malloc(sizeof(a) + sizeof(b));

memmove(paResult, a, sizeof(a));
memmove(paResult + (sizeof(a) / sizeof(a[0])), b, sizeof(b));
Записан

ATAMAN200
Интересующийся
**
Офлайн Офлайн

Сообщений: 29


Просмотр профиля
« Ответ #4 : 24 Октябрь 2010, 21:58:07 »

Если предложенным выше образом
Код:
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include "string.h"
using namespace std;
int a[] = {4,2,6}, b[] = {645,998,333}, c, paResult[6];
int main()
{
for(a[c]; c < sizeof(a)/sizeof(*a); c++)
{
void *sss = malloc(sizeof(a) + sizeof(b));

memmove(paResult, a, sizeof(a));
memmove(paResult + (sizeof(a) / sizeof(*a)), b, sizeof(b));
cout << *paResult << endl;
}
getch();
}
то выводит на экран
4
4
4
Записан
c-coder
Пользователь
***
Офлайн Офлайн

Сообщений: 110


Просмотр профиля
« Ответ #5 : 24 Октябрь 2010, 22:39:47 »

А так если?
Код:
int a[] = {4,2,6}, b[] = {645,998,333}, c;
int main()
{
void *paResult = malloc(sizeof(a) + sizeof(b));
memmove(paResult, a, sizeof(a));
memmove(paResult + (sizeof(a) / sizeof(*a)), b, sizeof(b));

for(c=0; c < sizeof(a)/sizeof(*a)+sizeof(b)/sizeof(*b); c++)
{
cout << *paResult << endl;
paResult++;
}
getch();
}
Записан
Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #6 : 25 Октябрь 2010, 20:42:36 »

А что классику

Код:
for(int i=0;i<3;i++)
{
paResult[i]=a[i];
paResult[i+3]=b[i];
}

Отменили???
все эти memmove можно использовать только  когда прекрасно понимаешь что происходит в памяти.
С уважением Валерий
Код:
Записан
Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #7 : 25 Октябрь 2010, 20:48:57 »

что Это ???

Код:
int main()
{
for(a[c]; c < sizeof(a)/sizeof(*a); c++)
{
чему равно c???
инициализация цикла  a[c];
Код:
void *sss = malloc(sizeof(a) + sizeof(b));

memmove(paResult, a, sizeof(a));
memmove(paResult + (sizeof(a) / sizeof(*a)), b, sizeof(b));
cout << *paResult << endl;
}

на каждой итерации  выделяем память которую потом не используем???
как у тебя это вообще работает
С уважением Валерий
Записан
ATAMAN200
Интересующийся
**
Офлайн Офлайн

Сообщений: 29


Просмотр профиля
« Ответ #8 : 25 Октябрь 2010, 20:51:29 »

спс за помощ я уже расматриваю другую возможность
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!