سلام
پاسخ سوال زیر رو میخواستم. ممنون از شما.
خروجی حاصل از اجرای
proce ("ABCD")
چه می شود؟
void proce (char *s) { for (int n=0 ; s[n] != '\0' ; n++) for (int i=0 ; i<n ; ++i) s[i]=s[n-i]; cout << s; }
1) "ABCD"
2) "DCBA"
3) " "
4) "DBCD"
این کد اشکال اساسی داره چون حافظهای که در تابع استفاده میشه حافظۀ لیتراله و قابل تغییر نیست. کد باید به این شکل تغییر کنه:
// Example program #include <iostream> #include <string> using namespace std; void procedure (char* s) { for(int n = 0 ; s[n] != '\0' ; n++) for(int i = 0; i < n; i++) { s[i]=s[n - i]; } cout<< s; } int main() { char s[10] = "ABCD"; procedure(s); return 0; }
هر چند خروجی در هیچ گزینهای نیست: http://rextester.com/UTW75398
شما از literal string استفاده کردید که خودش ثابته و همچنین r value هم هستش پس اگر به هر طریقی قصد دارید ثابت را تغییر بدید خطای زمان کامپایل دریافت می کنید.
برای جلوگیری از اینکار می تونید رشته را به صورت زیر تعریف کنید.
char str[] = "ABCD";
دوستان سوالی که مطرح کردم به صورت بالا هست و پاسخی که کتاب داده به صورت زیره: البته سوال به شکل کاملا درست (از نظر کامپایل کردن) مطرح نشده و بعضی جاها ";" اشتباه اومده، اما کلیت سوال مهمه که جوابشو زده گزینه ۳. حالا من هر جور حساب میکنم ۳ نمیشه به نظر شما پاسخ اشتباه نیست؟ اونجا که گفته در حلقه اول n=4 میشه به نظرم اشتباهه.