Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 19:26   #1
mike_DI
 
Регистрация: 07.11.2011
Сообщений: 4
По умолчанию функции memcpy и memmove

Как с помощью этих ф-й сделать обьеденения двух стеков в один. Я написал все работает, только результат вывода происходит только вывод первого стека.

Код:
#include "stdio.h"
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>



int pop (int steck[]);
void push (int *steck,int x);
int two_steck(int steck1[], int steck2[], int steck3[]);


int steck1[100], top=-1; 
int steck2[100];
int steck3[200];

int pop (int steck[]) {
    int r=0;
    r=steck[top];
    top--;
  return r;
}

void push (int *steck,int x) {
    top++;
    steck[top]=x;
}
int two_steck(int steck1[], int steck2[], int steck3[]){
    top++;
    memcpy(steck3, steck2, 100); // Копирует из второго стека в третий в первые 100 эл.
    memmove(steck3+100, steck3, 100); // перемещает данные второго стека в конец
    memcpy(steck3, steck1, 100); // копирует в начало третьего первый

    return steck3[top];
}



int main () {
    int i, j, x, x2, y, y2, N;
     int f, test;
    
    printf("Количество елементов в стеки:");  
    scanf ("%d", &N);
    
    printf("\nЕлементы первого стека:");
    for(i=0; i<N ;i++){
       scanf ("%d",&x);
       push (steck1,x);
    }
    
    printf("Первый стек:");
    for(j=0; j<N ;j++){
       y=pop (steck1);
       printf("%d ", y);
    }
    
    printf("\n\nЕлементы второго стека:\n");
    for(i=0; i<N ;i++){
      scanf ("%d",&x2);
      push (steck2,x2);
    }
    
    printf("Второй стек:");
    for(j=0; j<N ;j++){
           y2=pop (steck2);
           printf("%d ", y2);
    }
    
   printf("Обьедененный стек:");

	 for(i=0; i<N;i++){  
        two_steck(steck1,steck2,steck3);
        printf("%d\t", steck3[i]);
     }

    scanf("%d",&test); 
    return 0;
}

Последний раз редактировалось mike_DI; 16.12.2011 в 20:52.
mike_DI вне форума Ответить с цитированием
Старый 16.12.2011, 20:13   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

3-ий параметр 100*sizeof(int)
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
Функция memcpy и массивы. Corvette Общие вопросы C/C++ 2 26.08.2011 21:16
Заполнение массива из структуры через memcpy Master_Devel Visual C++ 0 14.06.2011 17:56
memcpy копирует не все Sam Gold Общие вопросы C/C++ 1 28.04.2010 10:40
memcpy: Копируем double по половинкам Роман Радер Общие вопросы C/C++ 2 11.11.2009 00:08