<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Ayşegül</title>
        <link>https://virgool.io/feed/@std_thread</link>
        <description>destroyer from onja | @null_terminator_sc -&gt; telegram-desktop :)</description>
        <language>fa</language>
        <pubDate>2026-06-16 23:33:13</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/52929/avatar/TyL2xM.png?height=120&amp;width=120</url>
            <title>Ayşegül</title>
            <link>https://virgool.io/@std_thread</link>
        </image>

                    <item>
                <title>Get The Last Char In C-Array</title>
                <link>https://virgool.io/@std_thread/get-the-last-char-in-c-array-zcui9aii6nmi</link>
                <description>برای اینکه آخرین کاراکتر یک آرایه را چاپ کنیم چه کار میکنم ؟char name[] = &quot;Virgool it&#039;s trouble for showing code&quot;;
size_t length = strlen(name);
printf(&quot;%c\n&quot;, name[length - 1]);خب به نظرم این روش زیاد جالبی نیست، چرا که برای اینکار نیاز به glibc یا musl و یا هر libc دیگه‌ ای پیدا میکنیم. و کاری هم که این کتابخونه ها میکنند اینه :size_t strlen(const char *s)
{
    const char *a = s;
    for (; *s; s++);
    return s-a;
}این سورس از musl هست، و میبینید که برای پیدا کردن طول از یک حلقه استفاده کرده.اما یک کار دیگر هم میتوان کرد، قبول دارید که میشه آدرس کل آرایه را گرفت و منهای یکی کرد و آخرین خونه آرایه را به دست آورد ؟ خب بیاید انجام بدیم :char  name[] = &quot;Virgool it&#039;s trouble for showing code&quot;;
printf(&quot;%c\n&quot;, *((char*)(&amp;name + 1) - 2));به همین راحتی میتونیم آخرین خونه آرایه را به دست بیاریم. اینجا name&amp; به ما آدرس کل آرایه را میده، هرچند که خود name هم آدرس کل آرایه را میده اما فرقش اینکه name به خونه اول اشاره میکنه اما name&amp; به کل آرایه، پس اگه بگیم name + 1&amp; یعنی آدرس کل آرایه به علاوه یک که میشه یکی بعد از آخرین خونه آرایه، حالا برای اینکه ما بگیم که آدرس خونه قبلی را میخوایم اگه حالت ساده منهای دو کنیم:*((&amp;name + 1) - 2)که خب برگشتیم سر جای اولمون، چرا که اون name&amp; به کل آرایه اشاره میکرد باید این نوع اشاره کردن را عوض کنیم و بگیم که تبدیل کن به *char و اینطوری به اندازه یک char برمیگرده عقب. مورد دیگه دقت کنید که شما برای رشته ها باید منهای دو کنید چرا که آخرین کاراکتر null terminator  هست  در واقع.به این روش هم میتونید بدون استفاده از عملگر sizeof طول آرایه را حساب کنید به اینصورت :size_t length = *(&amp;name + 1) - name;که اختلاف را به دست میاره. البته طبق C99 §6.5.2.1/2 (صفحه ۸۲) میدونید که E1[E2] برابر هست با (*((E1)+(E2)))پس بهتره که اینطوری بنویسیم :size_t length = (&amp;name)[1] - name;برای اینکه یه بهبودی به کدمون بدیم، میتونیم در قالب یک ماکرو هم پیاده کنیم :#include &lt;stdio.h&gt;
#define last(array, index, type) \
    (* ((type*)(&amp;array + 1) - index))
int main ()
{
    int int_array[] = {1, 2, 3, 4};
    char char_array[] = &quot;something is here&quot;;
    printf(&quot;%d\n&quot;, last(int_array, 1, int));
    printf(&quot;%c\n&quot;, last(char_array, 2, char));
    return 0
}</description>
                <category>Ayşegül</category>
                <author>Ayşegül</author>
                <pubDate>Tue, 20 Aug 2019 19:05:36 +0430</pubDate>
            </item>
                    <item>
                <title>i3 ! Stopp TILING</title>
                <link>https://virgool.io/@std_thread/i3-stopp-tiling-sd8t4mcezyqu</link>
                <description>قابلیت های i3 واقعا عالیه و غیر قابل وصفه راحتیش توی کار کردن با سیستم عامل. اما وقتی عذاب آور میشه که دارید برنامه ای به همراه GUI‌ مینویسید و مدام میخواید خروجی اون رو ببینید و مقایساتی با کدی که نوشتید رو انجام بدید.خب توی این موقعیت اگر هی i3 بخواد براتون اون پنجره رو به صورت کاشی مانند یا حالت پشته و یا تب مانند بیاره ... یه ذره روی اعصابه. میتونید با این تنظیم کوچک توی پیکربندی i3تون این مشکل رو تا حدودی حل کنید :for_window [class=&quot;[.]*&quot;] floating enableبه اینصورت که برای تمام پنجره ها میاد و حالت شناور بودن رو فعال میکنه. اما بازم عذاب آوره چرا که این برای تمام پنجره ها صورت میگیره. میتونیم فقط بگیم که یک پنجره اینطوری باشه :for_window [class=&quot;my windows title&quot;] floating enableاینجا کافیه که اسم پنجره اتون رو قرار بدید، از این به بعد هروقت که اون پنجره اجرا بشه سریعا به حالت شناور درمیاد و این خیلی خوبه.نکته : ظاهرا این ویرایشگر سایت نمیتونه درست این مقادیر رو نمایش بده ... برای همین من در قالب یک gist گیتهاب گذاشتم :https://gist.github.com/sam79jahan/c6a6403658ac9202d3bf25a22b8a5006</description>
                <category>Ayşegül</category>
                <author>Ayşegül</author>
                <pubDate>Sat, 29 Jun 2019 14:39:02 +0430</pubDate>
            </item>
                    <item>
                <title>QML Realtime OUTPUT !</title>
                <link>https://virgool.io/@std_thread/qml-realtime-output-tqcfi3nhy81m</link>
                <description>آیا شما هم توی طراحی ضعیف هستید ؟ و می‌خوایید وقتی که دارید طراحی می کنید همزمان خروجی رو هم ببینید ؟خب پیشنهاد می کنم که از این ابزار توپ استفاده کنید :https://github.com/GIPdA/runtimeqmlبا استفاده از این ابزار به راحتی میتونید هنگام طراحی با QML خروجی رو مستقیم مشاهده کنید.</description>
                <category>Ayşegül</category>
                <author>Ayşegül</author>
                <pubDate>Sat, 29 Jun 2019 13:38:25 +0430</pubDate>
            </item>
                    <item>
                <title>Structure padding</title>
                <link>https://virgool.io/@std_thread/structure-padding-pzj3mpcipqwf</link>
                <description>شاید خیلی‌ از دوستان به‌صورت سرسری از این موضوع گذشته‌باشند، و یا شایدم اصلاً اطلاعی درموردش نداشته‌باشند.این Struct رو در نظر داشته‌باشید :struct foo{
    char ch;
    int in;
};مسلماً در نظر دارید که الآن متغیر char به اندازه یک‌بایت، و متغیر int به اندازه چهار‌بایت باید و نهایت پنج بایت باید فضا اشغال کند. خب بیاید یک تست بکنیم ببینم آیا واقعاً درست است ؟#include &lt;stdio.h&gt;
int main (){
    printf(&quot;%ld\n&quot;, sizeof(struct foo));
    return 0;
}و درنهایت :$ gcc-9 struct.c -o out ; ./out
$ 8خب ! ما انتظار ۵ بایت داشتیم، ولی چرا شد ۸ ؟. این اتفاق برای دسترسی سریع‌تر به مقادیر در حافظه می‌افته و بش Structure Padding گفته می‌شود. بدین‌صورت که اندازه نوع‌ &#x60;int&#x60; چهاربایت هست و اندازه نوع &#x60;char&#x60; یک‌بایت. کامپایلر یک چهاربایتی برای &#x60;int&#x60; در نظر می‌گیرد و یک‌چهاربایتی نیز برای &#x60;char&#x60; به این کد توجه کنید :#include &lt;stdio.h&gt;
struct foo{
    char ch;
    char ch2;
    char ch3;
    char ch4;
    int in;
};
int main (){
    printf(&quot;%ld\n&quot;, sizeof(struct foo));
    return 0;
}و حالا بیاید خروجی رو ببینیم  :$ gcc-9 struct.c -o out ; ./out
$ 8:) و همینطوری که گفتیم، کامپایلر برای نوع &#x60;char&#x60; هم درحالی که یک‌بایت نیاز داره، چهاربایت می‌گیره.اگر به دنبال کردن این داستان علاقه دارید، پیشنهاد می‌کنم که این مقاله آقای‌اریک‌ریموند رو بخونید.</description>
                <category>Ayşegül</category>
                <author>Ayşegül</author>
                <pubDate>Sun, 16 Jun 2019 22:04:14 +0430</pubDate>
            </item>
                    <item>
                <title>Quick Trick</title>
                <link>https://virgool.io/@std_thread/mkdir-qmyge7ytaxlj</link>
                <description>فرض کنید داخل ترمینال هستید، و می‌خواهید به سرعت یک ساب-دایرکتوری درست کنید و همزمان نیز داخل آن وارد شوید. برای اینکار شما مجبور به وارد کردن :$ mkdir sub-dir
$ cd sub-dirامّا می‌توانید با تعریف یک تابع در فایل :$ $HOME/.bashrcاین کار رو به این‌صورت خلاصه :$ mksub sub-dir
$ pwd
/tmp/sub-dir
$

و تابعی که نیاز هست برای این‌کار :mksub(){ mkdir &quot;$1&quot; &amp;&amp; cd &quot;$1&quot; ; }</description>
                <category>Ayşegül</category>
                <author>Ayşegül</author>
                <pubDate>Sun, 16 Jun 2019 18:32:13 +0430</pubDate>
            </item>
            </channel>
</rss>