تابعی در زبان C بنویسید که با استفاده از strncpy یک توکن (زیررشته) از رشته ورودی را در هنگام ساخت یک تحلیلگر لغوی ساده (lexer) به بافر خروجی کپی کند و از سرریز حافظه جلوگیری نماید.
4.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:13 0.0
این تابع باید از هدر string.h و تابع strncpy برای کپی امن استفاده کند، اندازه بافر مقصد را دریافت کند و پس از strncpy خاتمهدهنده '\0' را تضمین کند (مثلاً strncpy(dest, src + start, n); dest[min(n-1, len)]=0). در صورت نیاز از malloc برای تخصیص دینامیک استفاده کرده و پس از استفاده حافظه را آزاد کنید. نکتهها: همیشه طول کپی را محدود کنید تا از overflow جلوگیری شود، و هنگام کار در زمینه کامپایلر/مفسر این روش برای استخراج توکنها از ورودی مفید است؛ ساده شروع کنید و کنترلهای پایه برای اندازهها و مقدار NULL را اضافه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای استخراج توکن با strncpy، اندازه کپی را به n-1 محدود کنید و طول منبع از آدرس start را در نظر بگیرید تا از سرریز بافر خروجی جلوگیری شود. سپس حتما '\0' را در انتهای بافر مقصد اضافه کنید (مثلاً dest[copy_len] = '\0') تا خروجی یک رشته معتبر باشد. اگر اندازه ورودیها یا آدرسها نامطمئن است، از malloc برای تخصیص دینامیک استفاده کرده و پس از استفاده آن را آزاد کنید و ورودیها را به طور دقیق NULL-check کنید. این رویکرد ساده در یک lexer، استخراج توکنها را امنتر میکند و نگهداری و debugging را با کنترل مرزها تسهیل میکند.
گزارش