C-Style Strings

C-Style strings در C و C++، رشته‌هایی هستند که به صورت یک آرایه از کاراکترها تعریف می‌شوند و با یک null terminator ('\0') پایان می‌یابند. این نوع رشته‌ها از زبان C به C++ منتقل شده‌اند و همچنان در بسیاری از پروژه‌های سطح پایین (مثل کار با حافظه یا کتابخانه‌های قدیمی) استفاده می‌شوند.

تعریف یک C-Style String

#include <iostream> using namespace std; int main() { char str1[] = "Hello"; // به طور خودکار '\0' در انتها اضافه می‌شود char str2[6] = {'H','e','l','l','o','\0'}; // صریح cout << str1 << endl; // خروجی: Hello cout << str2 << endl; // خروجی: Hello }

🔹 همیشه باید به اندازه کافی فضا در آرایه در نظر بگیرید تا '\0' جا شود.

ورودی گرفتن C-Style String

#include <iostream> using namespace std; int main() { char name[50]; cout << "Enter your name: "; cin >> name; // تا اولین فاصله می‌خواند cout << "Hello " << name << endl; }

📌 اگر می‌خواهید ورودی شامل فاصله‌ها هم باشد، باید از ()cin.getline استفاده کنید:

cin.getline(name, 50);

توابع کتابخانه <cstring>

کتابخانه <cstring> مجموعه‌ای از توابع برای کار با C-Style Strings دارد:

تابعتوضیح
strlen(s)طول رشته (بدون احتساب '\0')
strcpy(dest, src)کپی رشته
strncpy(dest, src, n)کپی حداکثر n کاراکتر
strcat(dest, src)الحاق رشته‌ها (اضافه کردن src به انتهای dest)
strcmp(s1, s2)مقایسه دو رشته (0 اگر برابر باشند)
strncmp(s1, s2, n)مقایسه n کاراکتر اول

مثال:

#include <iostream> #include <cstring> using namespace std; int main() { char s1[20] = "Hello"; char s2[] = "World"; cout << "Length of s1: " << strlen(s1) << endl; strcat(s1, s2); // s1 = "HelloWorld" cout << "After strcat: " << s1 << endl; strcpy(s1, s2); // s1 = "World" cout << "After strcpy: " << s1 << endl; cout << "strcmp(s1, s2): " << strcmp(s1, s2) << endl; // 0 چون برابرند }

تفاوت با std::string

  • std::string در C++ ایمن‌تر و راحت‌تر است.

  • C-Style string ها باید به صورت دستی مدیریت شوند (حافظه، طول، کپی).

  • std::string بسیاری از مشکلات (مثل overflow یا مدیریت حافظه) را ساده می‌کند.