ورود

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



azmoon.ir
شنبه 01 آذر 1393, 12:36 عصر
سلام دوستان


من تازه برنامه نویسی C رو شروع کردم. قبلاً بیسیک کار میکردم و خیلی از کارا به راحتی انجام می شد. مخصوصاً کار با رشته و این در حالی است که کار کردن با رشته ها تو C داره پدری از من در میاره اون سرش نا پیدا.

حالا بعد این همه داستان تا حدودی با ساختار رشته ها تو C آشنا شدم و مثل یک آرایه با شخصیت باهاش رفتار میکنم. ولی الان مشکلی که بهش برخوردم و نمی تونم حلش کنم تابع برگشتی است.

ببینید من میخوام یه تابعی بنویسم که یه رشته رو بفرستم توش و روی اون رشته عملیات انجام بدم و بعد رشته جدید رو برگردونم به برنامه اصلی ولی نمیشه که نمیشه.


char get_dr(char str1){
char str2[] = "salam";
return str2;
}

ببینید من برای تست یه تابع نوشتم و توی اون str2 رو به مقداری دادم و حالا می خوام با return اون رو برگردونم به برنامه اصلی ولی error میده و ماجراهای همون آرایه ها پیش میاد error میگه طول str2 بیشتر پس نمی تونم بفرستمش

لطفاً اساتید c کمک کنن. ببینید خلاصه تمام این حرفا اینه که می خوام یه تابع داشته باشم که یه رشته برای من برگردونه یعنی یه سری عملیات توی تابع بر روی رشته انجام بشته و برگردونده بشه

rahnema1
شنبه 01 آذر 1393, 12:44 عصر
سلام
ببیند char با * char و [] char فرق می کنه. char فقط یک حرف ( یا به قولی عدد بین 0 تا 255 ) شامل میشه اما اون دو مورد شامل آرایه ای از char میشه
آرایه ای از char میتونه به اشاره گری از char یا * char تبدیل بشه که اون اشاره گر در واقع اشاره گر به عنصر اول آرایه هست
همچنین وقتی شما یک آرایه به تابع می فرستید دیگه لازم نیست تابع چیزی بر گردونه چون تغییرات روی همون آرایه مستقیما انجام میشه اگر چه می شه هم او را بر گردوند
بنابراین شما همون آرایه را که به عنوان ورودی گرفتید همون را بر می گردونید

char * get_dr(char *str1){
char str2[] = "salam";
str1[0] = str2[0];
return str1;
}



void get_dr(char *str1){
char str2[] = "salam";
str1[0] = str2[0];
}


char * get_dr(char str1[]){
char str2[] = "salam";
str1[0] = str2[0];
return str1;
}



void get_dr(char str1[]){
char str2[] = "salam";
str1[3] = str2[1];
}

azmoon.ir
شنبه 01 آذر 1393, 20:46 عصر
سلام

خیلی ممنون با راهنمایی شما مشکلم حل شد. من از اشاره گر استفاده کردم و مشکل حل شد. ممنون :لبخندساده: