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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 97, средняя оценка - 4.76
Welemir
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
#1

Насчёт функции memcpy() - C++

30.09.2009, 21:04. Просмотров 12785. Ответов 6
Метки нет (Все метки)

Начинаяю использовать эту функцию.Её синтаксис:

void memcpy(void *to, const void *from, size_t count);

Вопрос_1: Что такое size_t ?

И вообще,зачем указателям тип воид? Они что,что-то вовращают?)) В учебнике пока такого не встречал,а функция нужна(

ЗЫ: Нужно скопировать один числовой непустой массив в другой числовой массив...как это сделать не догоню уже полчаса.......

Надыбал также пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <varchar(255).h>
int main(void)
{
   char buf1[SIZE], buf2[SIZE];
 
   strcpy(buf1, "Когда, в случае если...");
   memcpy(buf2, bufl, SIZE);
   printf(buf2);
     
return 0;
}
В синтаксисе ни хрена не сказано про тип char.Что такое SIZE - тоже.Привер взял с сайта
_http://c2p.ru/c/memcpy.html
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2009, 21:04     Насчёт функции memcpy()
Посмотрите здесь:

Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy - C++
Бывает ли на практике такое, что код #define size 1000; // some value int x, y; /* ... */ memcpy(y, x, (size + 1) * sizeof(int)); ...

Работа функции memcpy - C++
Подскажите пожалуйста: 1. Каким образом работает функция memcpy(&amp;buf1,&amp;genday,2) и какого типа данные окажутся в buf1? Заранее всем...

Не правильная работа memcpy с вектором - параметром функции - C++
Есть функция int InitX( CUSTOMVERTEX InVertexes, int VertexCount ) { //... void* pBV; memcpy(pBV,...

memset, memcpy - C++
Использую MSVS 2008. Почему memcpy работает только с char? То есть, такой код работает: int main() { char a1 = &quot;123&quot;; ...

Не работает memcpy - C++
Нужно просто полностью скопировать первый массив, во второй, длина у них одинакова. Делаю так: BYTE in; // = {10, ...} типа заполнен...

2d ---> 1d array и memcpy - C++
Можно ли сконвертировать двумерный массив в одномерный с помощью memcpy? Если да, то будет ли быстрее, чем тупое перебирание в циклах?

Объяснить работу Memcpy - C++
Доброго времени суток! Можете пояснить работу memcpy под C++? Что-то у меня определённо работает не так. Например такой код: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
30.09.2009, 21:08     Насчёт функции memcpy() #2
size_t - беззнаковый тип, размер которого зависит от платформы. Вроде так: для 32-битной системы sizeof(size_t) == 4, для 64-битной == 8

указатель на void* нужен для того, чтобы передавать в функцию указатель любого типа - void "пАглАщАет (:" его.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.09.2009, 21:15     Насчёт функции memcpy() #3
C
1
2
3
4
5
int src[100];
int dest[100];
 
for ( i= 0; i<100; i++ ) { src[i]= i; }
memcpy( dest, src, 100*sizeof(int) );
void * - это как бы абстрактный указатель на некую память.
Вместо void* можно подавать любой указатель на данные и компилятор не будет возражать.
size_t - это тип обозначающий размер, беззнаковый, начинается от 0 и выше.

SIZE не понятно что, но видимо определено где-то

Добавлено через 1 секунду
C
1
2
3
4
5
int src[100];
int dest[100];
 
for ( i= 0; i<100; i++ ) { src[i]= i; }
memcpy( dest, src, 100*sizeof(int) );
void * - это как бы абстрактный указатель на некую память.
Вместо void* можно подавать любой указатель на данные и компилятор не будет возражать.
size_t - это тип обозначающий размер, беззнаковый, начинается от 0 и выше.

SIZE не понятно что, но видимо определено где-то
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.09.2009, 21:33     Насчёт функции memcpy() #4
Небольшой пример чтобы было понятно что такое SIZE:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <memory.h>
#include <string.h>
#include <stdio.h>
 
char string1[20] = "123456789";
char string2[20] = "abcdefgih";
int SIZE=0;
void main( void )
{  
   memcpy( string1, string2, SIZE );
   printf( "string1:\t\t%s\n", string1 );   
}
При SIZE=0, на экран выводится: string1 123456789
При SIZE=9, на экран выводится: string1 abcdefgih
При SIZE=4, на экран выводится: string1 abcd56789
Т.е. SIZE число - сколько символов копировать из string2 в string1
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.09.2009, 21:43     Насчёт функции memcpy() #5
Про size_t можно почитать тут.
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,639
Записей в блоге: 26
01.10.2009, 09:47     Насчёт функции memcpy() #6
size_t - это тип, который устанавливается в системных инклюдах. Как было написано выше, размер этого типа подбирается под размер разрядности процессора. Как правило определяется через "typedef unsigned long size_t"

SIZE - это такое же имя, определённое в программе. Либо ты исходник коряво переписал, либо его пьяные наборщики коряво вбили в книгу. Сильно подозреваю, что вместо фрагмента

C
1
#include <varchar(255).h>
должно было быть

C
1
2
#include <varchar.h>
#define SIZE 255
Как работает #define можешь почитать тут
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2015, 23:21     Насчёт функции memcpy()
Еще ссылки по теме:

Своя реализация memcpy - C++
Собственно одно из заданий Дейтела это требует. Но только я столкнулся с тем что void *memcpy(void *s1, const void *s2, size_t n) ...

Memcpy и динамические массивы - C++
Почему значение массива A изменилось? Как этого избежать? int *a = new int ; A = 3; a = 5; int *b = new int ; ...

Как работает memcpy? - C++
Небольшой вопрос по поводу memcpy. Какая из функций будет работать быстрее? typedef unsigned int WORD32; void wcpy(WORD32 * D,...

Memcpy - вылетает исключение - C++
нужно добавлять в массив по одному элементу и при добавлении нового элемента динамически увеличивать память массива но при копировании...

Подскажите функцию аналог memcpy() - C++
Функция memcpy() копирует из одного массива в другой первые size элементов. А есть аналогичная стандартная функция, но которая бы...


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

Или воспользуйтесь поиском по форуму:
na6tena
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 99
28.04.2015, 23:21     Насчёт функции memcpy() #7
Цитата Сообщение от odip Посмотреть сообщение
void * - это как бы абстрактный указатель на некую память.
А с CString можно работать?
Yandex
Объявления
28.04.2015, 23:21     Насчёт функции memcpy()
Ответ Создать тему
Опции темы

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