با استفاده از تابع std::strcat در C++ دو رشتهٔ C-style را از ورودی بگیر، آن‌ها را در یک بافر با اندازهٔ مناسب ادغام کن و رشتهٔ نتیجه و طول آن را چاپ کن؛ در صورت ناکافی بودن بافر پیغام خطا نمایش بده.

15.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 02:19

0.0

برای حل مسئله از هدر و توابع strlen، strcpy و strcat استفاده کنید: اندازهٔ بافر را برابر مجموع طول‌های دو رشته به‌علاوهٔ یک برای کاراکتر تهی ('\0') قرار دهید، سپس رشتهٔ اول را با strcpy در بافر کپی کنید و رشتهٔ دوم را با strcat الحاق کنید؛ قبل از الحاق طول‌ها را بررسی کنید تا از سرریز بافر جلوگیری شود. توجه داشته باشید این‌گونه پردازش‌های رشته‌ای در ساخت مفسرها/اینترپرتِرها و نیز هنگام آماده‌سازی خروجی‌های عددی در محاسبات علمی کاربردی هستند و در عمل استفاده از std::string یا نسخه‌های امن‌تر مانند strncat توصیه می‌شود.

توسط پژوهشگر در 198 روز قبل ساعت 02:19
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 198 روز قبل ساعت 02:20

قبل از استفاده از strcpy و strcat حتماً اندازهٔ بافر را برابر strlen(s1)+strlen(s2)+1 قرار بدهید و پیش از الحاق طول‌ها را برای جلوگیری از سرریز چک کنید. توابع strcpy/strcat به‌راحتی می‌توانند بافر را سرریز کنند، بنابراین در عمل نسخه‌های امن‌تر مثل strncpy/strncat یا بهتر از همه std::string را در نظر بگیرید. همچنین برای خواندن ورودی از متدهایی استفاده کنید که طول را محدود می‌کنند (مثلاً getline یا fgets) و دقت کنید که strlen طول بایت‌ها را می‌سنجد نه لزوماً تعداد کاراکترهای Unicode.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری