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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 97, средняя оценка - 4.76
Welemir
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
30.09.2009, 21:04     Насчёт функции memcpy() #1
Начинаяю использовать эту функцию.Её синтаксис:

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

указатель на void* нужен для того, чтобы передавать в функцию указатель любого типа - void "пАглАщАет (:" его.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
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++
 Аватар для valeriikozlov
4660 / 2486 / 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
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.09.2009, 21:43     Насчёт функции memcpy() #5
Про size_t можно почитать тут.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16844 / 5265 / 323
Регистрация: 30.03.2009
Сообщений: 14,169
Записей в блоге: 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()
Еще ссылки по теме:

C++ Memcpy - вылетает исключение
2d ---> 1d array и memcpy C++
Объяснить работу Memcpy C++

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

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

Текущее время: 14:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru