PDA

View Full Version : کپی یک رشته به حافظه



negarsoft
جمعه 06 فروردین 1389, 05:07 صبح
سلام
چجوری یک رشته رو من تو حافظه کپی کنم

amin1softco
جمعه 06 فروردین 1389, 11:47 صبح
شما منظورت چه حافظه ایی هست
شما وقتی یک رشته را تعریف می کنی اون در حافظه رم قرار می گیره
اما اگه منظورت کاری شبیه copy ویندوزه یکم فرق می کنه...
یا شاید منظورت هارد دیسک باشه ؟!!! سوال مبهمه؟؟؟؟

tdkhakpur
جمعه 06 فروردین 1389, 12:04 عصر
چجوری یک رشته رو من تو حافظه کپی کنم


memcpy(src, trg, 10);
strcpy(src, trg);

negarsoft
شنبه 07 فروردین 1389, 01:03 صبح
سلام
بله من می خوام یک رشته رو روی رم کپی کنم که بعد هر جای دیگه که خواستم پیست کنم

#include <stdio.h>
#include <string.h>

int main ()
{
char str1[]="Sample string";
char str2[40];
char str3[40];
memcpy (str2,str1,strlen(str1)+1);
memcpy (str3,"copy successful",16);
printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
return 0;
}

با استفاده از راهنمایی دوستمون این مثال رو دیدم ولی این توی رم کپی نمی کنه

amin1softco
شنبه 07 فروردین 1389, 08:34 صبح
این دستورا تو اون رمی که شما دنبالشی کپی نمی کنه برای اینکار باید از سر فایل ویندوز استفاده کنی :

برای دات نت http://msdn.microsoft.com/en-us/library/80db3kax.aspx (http://msdn.microsoft.com/en-us/library/80db3kax.aspx)

http://support.microsoft.com/kb/274308

مثال های کاملی در این دوتا لینک هست اینم یک مثال :


#include <windows.h>
#include <iostream>
BOOL SetClipboardText(LPCTSTR pszText)
{
BOOL ok = FALSE;
if(OpenClipboard(NULL)) {
// the text should be placed in "global" memory
HGLOBAL hMem = GlobalAlloc(GMEM_SHARE | GMEM_MOVEABLE,
(lstrlen(pszText)+1)*sizeof(pszText[0]) );
LPTSTR ptxt = (LPTSTR)GlobalLock(hMem);
lstrcpy(ptxt, pszText);
GlobalUnlock(hMem);
// set data in clipboard; we are no longer responsible for hMem
ok = (BOOL)SetClipboardData(CF_TEXT, hMem);

CloseClipboard(); // relinquish it for other windows
}
return ok;
}

negarsoft
دوشنبه 09 فروردین 1389, 05:07 صبح
سلام
ممنون ولی یک مشکلی هست من از لینوکس استفاده می کنم

amin1softco
دوشنبه 09 فروردین 1389, 07:53 صبح
شما باید یا بری سراغ GTK و این حرفا یا بری یک سر فایل به نام بوست (http://www.boost.org/) بگیری و روی کامپایلرت نصب کنی تا مشکل بر طرف بشه:تشویق:

a.gh.n
دوشنبه 09 فروردین 1389, 12:41 عصر
سلام
ممنون ولی یک مشکلی هست من از لینوکس استفاده می کنم
کجاش مشکله؟! خیلی هم عالیه!
memcpy تو برنامه ی شما دقیقا همون کاری رو انجام می ده که باید. حافظه رو از جایی به جای دیگه منتقل می کنه. ولی چیزی که از سوالتون فهمیدم می گه ظاهرا باید از mmap استفاده کنید:

man mmap
یه مثال هم داره.
یه ماکرو هم میشه نوشت که کار مورد نظرتون رو با memcpy انجام بده.

شما باید یا بری سراغ GTK و این حرفا یا بری یک سر فایل به نام بوست بگیری و روی کامپایلرت نصب کنی تا مشکل بر طرف بشه
GTK یکی از library های محیط های گرافیکیه لینوکسه. چرا اونجا همچین امکانی گذاشتن؟