منبع اصلی نوشتار زیر در این لینک قرار دارد

رشته ها در زبان C

در این آموزش، رشته ها در زبان برنامه نویسی C و استفاده از آن ها را بررسی می کنیم و می خواهیم تعریف و مقداردهی رشته ها و استفاده از آنها برای خواندن و نوشتن مقادیر را به شما بیاموزیم.

در زبان برنامه نویسی C یک رشته دنباله ای از کاراکترهاست در انتها برای مشخص شدن پایان رشته، کاراکتر null یا همان

0\
قرار گرفته است. برای مثال:

char c[] = "c string";

زمانی که کامپایلر زبان سی به یک دنباله از کاراکترها می رسد که بین ” ” قرار گرفته است، کاراکتر انتهای رشته (کاراکتر null یا همان

0\
) را خو به خود به آخر آن اضافه می کند و سپس در حافظه قرار می دهد. رشته کد بالا به صورت زیر ذخیره می شود:

تعریف رشته در زبان برنامه نویسی C

به طریق زیر می توانیم یک رشته با ظرفیت پنج کاراکتر تعریف کنیم که معمولاً آخرین کاراکتر را برای کاراکتر مشخص کننده انتهای رشته باید در نظر بگیرید. پس همیشه یکی بیشتر از نیاز خود ظرفیت را تعریف کنید که آخرین خانه دنباله برای

0\
بماند.

char s[5];

که شکل دنباله به صورت زیر قابل تصور است:

 

مقداردهی اولیه به رشته ها

به چند روش می توانید به یک رشته مقدار اولیه بدهید که این روش ها در زیر نشان داده شده اند:

char c[] = "abcd";

char c[50] = "abcd";

char c[] = {'a', 'b', 'c', 'd', '\0'};

char c[5] = {'a', 'b', 'c', 'd', '\0'};

که کاراکترها به شکل زیر ذخیره می شوند:

 

بیایید یک مثال بد را ببینیم که موجب اشکال در مدیریت حافظه و خطاهای غیرمنتظره می شود. تعریف و مقداردهی زیر را در نظر بگیرید:

char c[5] = "abcde";

اینجا ما سعی کرده ایم که یک رشته شش کاراکتری (با حساب آخرین کاراکتر که

0\
است) را به آرایه ای که ۵ عنصری است انتساب دهیم. که این خوب نیست.

همیشه در تعریف ظرفیت رشته در زبان C حساب آخرین کاراکتر را که انتهای رشته را مشخص می کند را هم داشته باشید.

 

انتساب مقدار به رشته ها

بعد از تعریف و مقداردهی اولیه، دیگر نمی توان به فقط با یک علامت = به کل یک آرایه یا رشته مقدار جدید بدهید. مثال زیر را ببینید. این مثال اجرا نمی شود و خطا دارد:

char c[100];
c = "C programming";  // Error! array type is not assignable.

یا باید کاراکتر به کاراکتر به رشته مقدار دهید یا اگر می خواهید به طور کامل یک رشته را داخل رشته دیگری کپی کنید، از تابع ()strcpy استفاده کنید.

خواندن رشته از کاربر

به طور کلی می توانید رشته ها را با توابع scanf و gets و fgest را از کاربر یا فایل بخوانید.

تابع scanf خواندن کاراکترهای رشته را تا قبل از رسیدن به یک کاراکتر خالی (space یا tab یا newline) ادامه می دهد و با رسیدن به هر کدام از آنها متوقف می شود. بنابراین برای خواندن یک خط کامل که وسط آن space هست مناسب نیست.

مثال ۱: خواندن رشته با تابع scanf

#include <stdio.h>
int main()
{
    char name[20];
    printf("Enter name: ");
    scanf("%s", name);
    printf("Your name is %s.", name);
    return 0;
}

خروجی:

Enter name: Dennis Ritchie
Your name is Dennis.

می بینید که تابع scanf تمام رشته را نخوانده و با رسیدن با فاصله بین اسم، خواندن را متوقف کرده است.

 

 

چطور یک خط را به طور کامل بخوانیم؟

برای این کار تابع fgets را توصیه می کنیم که حتی می تواند خواندن از فایل را هم انجام دهد. مثال زیر را ببینید.

 

مثال ۲: خواندن رشته با تابع fgets

#include <stdio.h>
int main()
{
    char name[30];
    printf("Enter name: ");
    fgets(name, sizeof(name), stdin);  // read string
    printf("Name: ");
    puts(name);    // display string
    return 0;
}

خروجی:

Enter name: Tom Hanks
Name: Tom Hanks

می بینید که در این مثال برای چاپ رشته از تابع puts استفاده کرده ایم که البته اجباری برای این استفاده نیست.

 

فرستادن رشته به توابع به عنوان آرگومان

 

رشته ها را می توانید همانند آرایه ها به توابع بفرستید. آرگومان های آرایه و رشته هم می توانند به شکل مقدار به ارایه فرستاده شوند و هم به عنوان اشاره گر سر ارایه.

مثال های زیر را ببینید تا موضوع روشن تر شود:

مثال ۳: فرستادن آرگومان رشته ای به تابع

#include <stdio.h>
void displayString(char str[]);

int main()
{
    char str[50];
    printf("Enter string: ");
    fgets(str, sizeof(str), stdin);             
    displayString(str);     // Passing string to a function.    
    return 0;
}
void displayString(char str[])
{
    printf("String Output: ");
    puts(str);
}

 

 

در مثال زیر، آرگومان رشته به عنوان اشاره گر با استفاده از اسم آن به تابع فرستاده می شود:

مثال ۴: فرستادن اشاره گر رشته به تابع

#include <stdio.h>

int main(void) {
  char name[] = "Harry Potter";

  printf("%c", *name);     // Output: H
  printf("%c", *(name+1));   // Output: a
  printf("%c", *(name+7));   // Output: o

  char *namePtr;

  namePtr = name;
  printf("%c", *namePtr);     // Output: H
  printf("%c", *(namePtr+1));   // Output: a
  printf("%c", *(namePtr+7));   // Output: o
}

 

برای کار بیشتر با رشته ها، توابع زیر را جستجو و مطالب مرتبط را مطالعه کنید:

 

 

 

مرجع این مطلب، صفحه “C Programming Strings” بوده است.

نوشته رشته ها در زبان C اولین بار در اوپن مایند. پدیدار شد.



برچسب ها :