PDA

View Full Version : سوال: بازگشت یک متغیر کاراکتری



zuck_619
چهارشنبه 08 خرداد 1387, 18:02 عصر
سلام . من میخوام به یک تابع یک رشته رو برگردونم . به صورت زیر نوشتم ولی error میده .

char change()
{
char str[100];
.
.
.
.
.
.
.
return str ;
}

emad_67
چهارشنبه 08 خرداد 1387, 20:18 عصر
سلام . من میخوام به یک تابع یک رشته رو برگردونم . به صورت زیر نوشتم ولی error میده .

char change()
{
char str[100];
.
.
.
.
.
.
.
return str ;
}
برای تابع تعریف کردی که یک کاراکتر برگردونه ولی در آخر نوشتی که:


return str;

در اینجا str یک اشاره گر هست و باید یه ایندکس خاص رو مشخص کنی که return کنه. مثلا:


return str[5];
اگر هم میخوای که یک رشته یعنی کل آرایه رو برگردونی باید برای تابع تعریف کنی که char * برگردونه. به این شکل:


char *change()
{
....
}
البته بازم مشکل پیدا می کنی. چون در داخل تابع یه آرایه تعریف کردی و بعد از اینکه این تابع به آخر برسه، حوضه فعالیت این آرایه تموم میشه و اتوماتیک از بین میره. و عملا آدرسی که از این تابع return شده به جایی اشاره میکنه که دیگه چیزی توش نیست. برای اینکه این مشکل هم حل بشه باید آرایه رو به صورت داینامیک تعریف کنی.

A.S.Roma
چهارشنبه 08 خرداد 1387, 21:38 عصر
سلام

گفتنی ها را emad_67 عزیز فرمودند . من فقط پیاده سازی کلام آخرشون رو می نویسم .


char * Change()
{
char *str;
str = new char [100];// str = ( char *)malloc(100);
........
.......
......
.....
return str;
}

moh.mon
یک شنبه 12 خرداد 1387, 21:59 عصر
البته توضیحات کامل بود ولی میخواستم بگم که با امپرسانت (&) هم میشه این کار و انجام داد.

zuck_619
دوشنبه 13 خرداد 1387, 09:57 صبح
در اینجا str یکی از اعضای کلاسه . پس نمیشه اشاره گر نوشت . از راهنمایی متسکرم . اگه میشه یه راهی بگید برای این حالت .

moh.mon
سه شنبه 14 خرداد 1387, 09:43 صبح
در اینجا str یکی از اعضای کلاسه . پس نمیشه اشاره گر نوشت . از راهنمایی متسکرم . اگه میشه یه راهی بگید برای این حالت
میشه با اشاره گر نوشت مشکل شما اینجاست که تو تابع متغیر کاراکتری تعریف نکردی.

emad_67
سه شنبه 14 خرداد 1387, 16:13 عصر
در اینجا str یکی از اعضای کلاسه . پس نمیشه اشاره گر نوشت . از راهنمایی متسکرم . اگه میشه یه راهی بگید برای این حالت .
در داخل کلاس میتونی str رو به صورت اشاره گر تعریف کنی و بعد در سازنده کلاس اونو تخصیص حافظه کنی


class ClassName
{
public:
ClassName();
private:
char *str;
};
ClassName::ClassName()
{
str=new char [10];
}

moh.mon
سه شنبه 14 خرداد 1387, 17:09 عصر
اینجا هم یه سر برو:

http://barnamenevis.org/forum/showthread.php?t=108264