PDA

View Full Version : سوال: كپي كردن محتويات يك آرايه در يك آرايه ديگر؟



ghasemweb
چهارشنبه 17 آذر 1389, 22:43 عصر
سلام كسي ميدونه چطوري ميشه تو سي پلاس محتويات يك آرايه را در يك آرايه ديگر كپي كرد؟

alibabaei2
چهارشنبه 17 آذر 1389, 22:49 عصر
با سلام
خیلی راحت با دستور "="(assignment) می تونی این کار رو انجام بدید. فقط توجه داشته باشید که باید از حلقه استفاده کنید

ghasemweb
چهارشنبه 17 آذر 1389, 22:54 عصر
اگه امكانش هست مثالي رو قرار بديد ممنون ميشم

glassysmart
چهارشنبه 17 آذر 1389, 23:03 عصر
int arry_1[100];
int arry_2 [100];
for (int i=0 ;i< 100 ;i++)
{
arry_2[i] = arry_1[i];
}

ghasemweb
چهارشنبه 17 آذر 1389, 23:47 عصر
ممنون ولي من يه روشي جز حلقه ميخواستم يعني تابعي داشته باشه كه اين كار رو در يك خط انجام بده

sasan_vm
پنج شنبه 18 آذر 1389, 00:28 صبح
memcpy(array1, array2, sizeof(array1));

alibabaei2
پنج شنبه 18 آذر 1389, 00:28 صبح
فکر کنم از تابع swap بشه استفاده کرد

ghasemweb
پنج شنبه 18 آذر 1389, 00:55 صبح
آقاي sasan_vm (http://barnamenevis.org/member.php?3284-sasan_vm) اگه مثال قرار بدي منظورتو كامل ميفهميم.متشكر

A.S.Roma
پنج شنبه 18 آذر 1389, 10:30 صبح
مثال نوشتن دیگه :لبخند:


int array1[100];
int array2[100];
memcpy(array1,array2,100);

ghasemweb
جمعه 19 آذر 1389, 18:20 عصر
#include <iostream.h>
#include <conio.h>
#include <mem.h>
void main()
{
int arr1[10];
int arr2[10];
arr1[3]=9999;
memcpy(arr1,arr2,10);
cout<<arr2[3];
getch();
}


پس چرا این سورس عمل نمیکنه؟

Felony
جمعه 19 آذر 1389, 18:38 عصر
#include <iostream.h>
#include <conio.h>
#include <mem.h>
void main()
{
int arr1[10];
int arr2[10];
arr1[3]=9999;
memcpy(arr1,arr2,10);
cout<<arr2[3];
getch();
}


پس چرا این سورس عمل نمیکنه؟
نباید هم کار کنه ؛
پارامتر اول مقصد هست و پارامتر دوم مبداء ، در ضمن پارامتر آخر هم تعداد بایت هایی هست که باید کپی بشه ، کدتون باید اینطور تغییر پیدا کنه :

#include <iostream.h>
#include <conio.h>
#include <mem.h>

void main()
{
int arr1[10];
int arr2[10];
arr1[3]=9999;
memcpy(arr2,arr1,sizeof(arr1));
cout<<arr2[3];
getch();
}

mehdi.mousavi
شنبه 20 آذر 1389, 12:42 عصر
سلام.
استفاده از memcpy مدتهاست که از نظر SDL منقضی شده و باید از نسخه Security Enhanced اون، یعنی memcpy_s (http://msdn.microsoft.com/en-us/library/wes2t00f%28v=VS.100%29.aspx) استفاده کرد. بطور نمونه، به این کد دقت کنید:


int src[12];
int dest[10];

src[3] = 9999;
memcpy(dest, src, sizeof(src));
اینجا، چون من دارم به اندازه sizeof(src) از src به dest کپی می کنم و dest ام به اندازه src فضا نداره، Memory Leak بوجود میاد. اما همین کارو با نسخه memcpy_s وقتی انجام بدیم،


int src[12];
int dest[10];

src[3] = 9999;
memcpy_s(dest, sizeof(dest), src, sizeof(src));

با این پنجره روبرو میشیم:


63450


که در نتیجه به سرعت متوجه ایراد کارمون میشیم و اونو میتونیم رفع کنیم. لیست توابع منقضی شده CRT رو می تونید در این آدرس (http://msdn.microsoft.com/en-us/library/ms235384%28VS.80%29.aspx) مشاهده کنید.

موفق باشید.