ایجاد آرایه‌ای از رشته‌ها در زبان C به روش‌های مختلف

#include <stdio.h>

int main()
{
    char a[][4] = {"Aa1", "Bb2", "CCC", "A41", "19", "1"};

    printf("%s\n%s\n%s\n", a[0], a[1], a[2]);
    printf("%s\n%s\n%s\n", a[3], a[4], a[5]);
    printf("\nStorage size for a: %d bytes\n", sizeof(a));

    return 0;
}

روش بالا، در واقع آرایه‌ای از کاراکترها در آرایه‌ای دیگر از کاراکترهاست. آرایهٔ درونی ۴ عنصر (Element) دارد و آرایهٔ بیرونی ۶ عنصر (Element) دارد. بنابراین متغیر a، مقدار ۲۴ بایت از حافظه را اشغال می‌کند (۲۴ = ۶ × ۴).

توجه: در a[0], a[1], a[2], a[3] عنصر چهارم آرایهٔ درونی کاراکتر ‘0\’ می‌باشد.
توجه: در a[4] عنصر سوم آرایهٔ درونی کاراکتر ‘0\’ می‌باشد.
توجه: در a[5] عنصر دوم آرایهٔ درونی کاراکتر ‘0\’ می‌باشد.

برنامه زیر نیز مانند برنامه بالا می‌باشد، اما با زبانی دیگر:

#include <stdio.h>
#include <string.h>

int main()
{
    char a[6][4];

    strcpy(a[0], "Aa1");
    strcpy(a[1], "Bb2");
    strcpy(a[2], "CCC");
    strcpy(a[3], "A41");
    strcpy(a[4], "19");
    strcpy(a[5], "1");

    printf("%s\n%s\n%s\n", a[0], a[1], a[2]);
    printf("%s\n%s\n%s\n", a[3], a[4], a[5]);
    printf("\nStorage size for a: %d bytes\n", sizeof(a));

    return 0;
}

با استفاده از ساختمان یا استراکچر (struct) می‌توانیم یک ساختمان به نام string بسازیم تا بتوانیم رشته‌ها را در آن ذخیره کنیم.

#include <stdio.h>

typedef struct strings
{
    char *text;
} string;

int main()
{
    string a[6];

    a[0].text = "Aa1";
    a[1].text = "Bb2";
    a[2].text = "CCC";
    a[3].text = "A41";
    a[4].text = "19";
    a[5].text = "1";

    printf("%s\n%s\n%s\n", a[0].text, a[1].text, a[2].text);
    printf("%s\n%s\n%s\n", a[3].text, a[4].text, a[5].text);
    printf("\nStorage size for a: %d bytes\n", sizeof(a));

    return 0;
}

اگر با استفاده از کلمه کلیدی sizeof، حجم a را بسنجیم مقدار ۲۴ یا ۴۸ بایت برگردانده می‌شود. دقت داشته باشید که این ۲۴ با مثال‌های ۱ و ۲ متفاوت است.

char *ptr = "Hello world!";
char str[10] = "ABCDEF";
int n[10];

sizeof(ptr): سایز پوینتر را ارزیابی می‌کند؛ که در معماری‌های ۳۲ بیتی برابر ۴ و در معماری‌های ۶۴ بیتی برابر ۸ می‌باشد.
sizeof(*ptr): سایز نوع char را ارزیابی می‌کند که برابر ۱ است.
sizeof(str): سایز آرایه را ارزیابی می‌کند که برابر ۱۰ است (چون سایز char برابر ۱ است و ما نیز ۱۰ نوعِ char داریم).
sizeof(n): سایز آرایه را ارزیابی می‌کند که برابر ۴۰ است (چون سایز int برابر ۴ است و ما نیز ۱۰ نوعِ int داریم).

فایل زیر در درک این مطالب به شما کمک می‌کند.

MD5 checksum:
8b08a81ad3c78782e3f0956b5a63ccb7 *string_type_in_c.zip