رشتهها در C
آشنایی با رشتهها به عنوان آرایه کاراکتری، کاراکتر پایان رشته و تعریف رشته در C
رشته در C چیست؟
برخلاف زبانهای دیگر، در C نوع دادهای به نام «string» وجود ندارد! رشته در C در واقع یک آرایه از کاراکترها است که با کاراکتر خاص \0 (کاراکتر تهی یا null terminator) تمام میشود.
تعریف رشته
char greeting[] = "Hello";
این کد معادل زیر است:
char greeting[] = {\x27H\x27, \x27e\x27, \x27l\x27, \x27l\x27, \x27o\x27, \x27\x270\x27};
کاراکتر \0 حیاتی است
کاراکتر \0 به توابع مثل printf میگوید رشته کجا تمام میشود. بدون آن، توابع به خواندن حافظه ادامه میدهند و خروجی نامعتبر چاپ میشود!
| اندیس | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| مقدار | H | e | l | l | o | \0 |
پس رشته "Hello" در حافظه ۶ بایت اشغال میکند (۵ حرف + کاراکتر تهی).
تعریف با اندازه مشخص
char name[20] = "Learning City"; // فضای کافی برای رشتههای تا 19 کاراکتر
چاپ رشته
char greeting[] = "Hello World!";
printf("%s", greeting); // با %s
دسترسی به کاراکترهای رشته
چون رشته آرایه است، میتوان به تکتک کاراکترها دسترسی داشت:
char name[] = "Ali";
printf("%c", name[0]); // A
name[0] = \x27S\x27; // حالا "Sli"
printf("%s", name);
پیمایش رشته با حلقه
char text[] = "Hello";
int length = 0;
while (text[length] != \x27\x5c0\x27) { // تا رسیدن به کاراکتر تهی
length++;
}
printf("طول رشته: %d", length); // 5
تغییر مستقیم رشته literal مجاز نیست!
char *s = "Hello";
s[0] = \x27J\x27; // ❌ رفتار نامعین! رشته literal در حافظه فقطخواندنی است
char arr[] = "Hello";
arr[0] = \x27J\x27; // ✅ درست — آرایه کپی خودش را دارد
نکات مهم
- رشتهها همیشه با
\0تمام میشوند — این کاراکتر را در محاسبه حافظه فراموش نکنید - برای تعریف رشته قابل تغییر، از آرایه استفاده کنید نه اشارهگر به literal
- دابلکوتیشن برای رشته و سینگلکوتیشن برای کاراکتر تکی
این مبحث بخشی از دوره آموزش کامل زبان C است.