PDA

View Full Version : پاک کردن محتوای یک متغیر



آتوسا
چهارشنبه 31 تیر 1383, 10:11 صبح
برای خالی کردن محتوای یک متغیر از نوع string ( به عبارت دقیق تر مثلا :

char find[15];

(

چی کار باید کرد؟
اگه این متغیر مقدار داشته باشه و بخوایم خالیش کنیم و دوباره توش چیزی بریزیم
( نمی خوام فاصله خالی هم جای متغیر های قبلی رو بگیره )

اگه بخوایم همینجوری بدون پاک کردنش توش متغیر بریزیم . مثلا داشته باشیم salam و بخوایم توش man رو بریزیم ، man جای sal رو میگیره و am پاک نمیشن و میشه manam.

آتوسا
چهارشنبه 31 تیر 1383, 10:56 صبح
ببخشید. حل شد.

find[i]='\0'

Inprise
شنبه 03 مرداد 1383, 10:44 صبح
البته یه کار قشنگ تر پاس کردن آدرس رشته ات به realloc است .

سیدهانی
یک شنبه 04 مرداد 1383, 06:44 صبح
سلام
ببخشید اما ایشون که متغیر خودشون رو به صورت دینامیک تعریف نکردن ؟

آتوسا
یک شنبه 04 مرداد 1383, 12:21 عصر
سلام
ببخشید اما ایشون که متغیر خودشون رو به صورت دینامیک تعریف نکردن ؟

بله درسته حق با شماست.


البته یه کار قشنگ تر پاس کردن آدرس رشته ات به realloc است .

اما اگه اشکالی نداره میشه بگین خروجی این تابع چیه ؟ int یا * int یا ... ؟ ( در صورت برقرار بودن یا برقرار نبودن ) من در help سی و سی پلاس پلاس جستجو کردم اما به جواب نرسیدم.

eyelash
پنج شنبه 01 دی 1384, 00:13 صبح
فکر کنم استفاده از خط زیر خیلی ساده تر باشه :

strcpy (find , NULL);

C++Lover
پنج شنبه 01 دی 1384, 03:26 صبح
فکر کنم استفاده از خط زیر خیلی ساده تر باشه :
;(strcpy (find , NULL


realloc یه کاری می کنه و strcpy یه کار دیگه انجام می ده به کمک realloc می تونید اندازه حافظه اختصاص یافته قبلی تون رو تغییر بدید (البته در ظاهر) ، یا به عبارتی دوباره حافظه تخصیص بدید که این در صورت تغییر اندازه رشته بسیار کارآمده . strcpy مخصوص کپی رشته هاست. در ضمن برای صفر کردن بافر می تونید از memset هم استفاده کنید.


اما اگه اشکالی نداره میشه بگین خروجی این تابع چیه ؟ int یا * int یا ... ؟ ( در صورت برقرار بودن یا برقرار نبودن ) من در help سی و سی پلاس پلاس جستجو کردم اما به جواب نرسیدم.

این تابع به این شکله :


void *realloc(
void *memblock,
size_t size
);

memblock حاوی اشاره گر به حافظه اختصاص یافته قبلی است.
size حاوی اندازه حافظه جدید مورد درخواست است.
مقدار بازگشتی این تابع به صورت *void است و به حافظه جدید اختصاص یافته اشاره می کند. در صورتی که size برابر صفر باشد و memblock مقداری غیر از NULL باشد و یا اینکه مقدار کافی حافظه برای گسترش دادن به اندازه داده شده موچود نباشد مقدار بازگشتی تابع برابر NULL یا همان صفر است. در صورتی که size برابر صفر باشد و memblock مقداری غیر از NULL باشد فقط حافظه اختصاص یافته قبلی آزاد می شود. و در صورت کمبود حافظه ، حافظه اختصاص یافته قبلی بدون تغییر باقی می ماند.

موفق باشید.

C++Lover
پنج شنبه 01 دی 1384, 03:47 صبح
آقا ما به این پست جواب دادیم ولی به تاریخش نگاه نکردیم.
این هم مثل یکی دیگه از پستها قدیمیه. نمی دونم اینها چه جوری می آن صفحه اول. اولین کسی که تو تاریخ جدید بهش پاسخ داده eyelash هستش فکر کنم باید دلیلش رو از ایشون بپرسیم.

نکته اینکه : از این به بعد اگه خواستیم به پستی جواب بدیم باید مواظب تاریخش هم باشیم چون این روزها تاریخها خیلی قاطی شدن.

eyelash
چهارشنبه 14 دی 1384, 16:38 عصر
فکر می کنم حق با شماست.