پرش به محتوا

مدیریت رشته در سی

از ویکی‌پدیا، دانشنامهٔ آزاد

مدیریت رشته‌ها در سی اشاره به گروهی از توابع در کتابخانه استاندارد سی دارد که برای مدیریت و انجام عملیات مختلف بر روی رشته‌ها پیاده‌سازی شده‌اند. عملیات مختلفی مانند کپی کردن رشته‌ها، الحاق رشته‌ها به یکدیگر، نشانه گذاری و جستجو پشتیبانی می‌شوند.

تعاریف

[ویرایش]

در زبان برنامه‌نویسی سی، یک رشته عبارتست از یک توالی پیوسته از کاراکترها که به یک کاراکتر تهی ختم می‌شوند. کاراکتر تهی (که به صورت ‎'\0' نوشته شده و دارای کد اسکی 0 است) هم جزئی از رشته به حساب می‌آید. در سی دو نوع رشته وجود دارد. یکی رشته بایتی و دیگری رشته توسعه‌یافته. یک رشته بایتی از نوع char تعریف شده و دربرگیرنده کاراکترهای ۸ بیتی است. رشته توسعه یافته از نوع wchar_t تعریف شده و دربرگیرنده کاراکترهای ۱۶ بیتی است.

یک تصور اشتباه رایج این است که تمام آرایه‌های کاراکتری رشته هستند، چون لیترال‌های رشته‌ای در هنگام کامپایل به آرایه تبدیل می‌شوند. این مهم است به یاد داشته باشید که یک رشته در هنگام رسیدن به اولین کاراکتر تهی (‎'\0') پایان می‌یابد. یک آرایه یا لیترال رشته‌ای که قبل از آخرین بایتش حاوی یک (یا چند) کاراکتر تهی است، دربرگیرنده یک رشته (یا در صورت امکان دربرگیرنده چندین رشته) است، اما خودش یک رشته نیست. در مقابل، می‌توان یک آرایه کاراکتری ایجاد کرد که اصلاً حاوی کاراکتر تهی نیست و حتی به کاراکتر تهی هم ختم نمی‌شود، بنابراین این آرایه یک رشته نیست. زمانیکه احتیاج به صرفه‌جویی در حافظه باشد، می‌توان از char به عنوان عدد صحیح استفاده کرد. برای مثال وقتی که احتیاج به آرایه‌ای از مقادیر بولی داریم.

در زبان سی از عبارت اشاره‌گر به رشته برای توصیف اشاره‌گری که به اولین بایت (پایین‌ترین آدرس) یک رشته اشاره می‌کند، استفاده می‌شود. در سی، از اشاره‌گرها برای ارسال رشته‌ها به توابع استفاده می‌شود. در مستندات اغلب واژه رشته به معنی اشاره‌گر به رشته است.

عبارت طول یک رشته برای توصیف تعداد بایت‌هایی که ماقبل کاراکتر تهی قرار دارند، استفاده می‌شود. برای مثال طول رشته A بیست بایت است، به این معنیست که ۱۹ بایت (هر بایت یک کاراکتر) قبل از کاراکتر تهی قرار دارد و آدرس اولین بایت در اشاره‌گر A قرار دارد. (خود کاراکتر تهی هم جزء رشته به حساب می‌آید) strlen یک تابع استاندارد برای بدست آوردن طول یک رشته است.

مروری بر توابع

[ویرایش]

اکثر توابع مرتبط با رشته‌ها در فایل سرآیند string.h تعریف شده‌اند. (سرآیند cstring در سی++) توابع مربوط به رشته‌های توسعه یافته هم در فایل wchar.h تعریف شده‌اند. (سرآیند cwchar در سی++) این سرآیندها همچنین حاوی اعلانات توابعی هستند که برای مدیریت بافرهای حافظه مورد استفاده قرار می‌گیرند.

رشته‌هایی که در سرآیند string.h تعریف شده‌اند بسیار محبوب هستند، از آنجا که آن‌ها بخشی از توابع استاندارد سی به حساب می‌آیند، کارکرد آن‌ها بر روی هر پلتفرمی که از سی پشتیبانی می‌کند تضمین شده‌است. با این حال برخی از این رشته‌ها مشکلات امنیتی مانند سرریز بافر دارند.


منابع

[ویرایش]

ویکی‌پدیای انگلیسی