انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: حافظه تکراری در c  (دفعات بازدید: 111 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین ابو مصعب

  • Jr. Member
  • *
  • ارسال: 28
  • جنسیت : پسر
  • ازادی گنو/لینوکس بی منت
حافظه تکراری در c
« : 31 شهریور 1401، 12:51 ق‌ظ »
سلام یک برنامه لاگ همین جوری برای c  نوشته بودم که قابلیت رنگ داشت . اما متوجه شدم یک چیزی غیر عادیه . این بود که فایل main.c به شرح زیر :‌#include <stdio.h>
#include "includes/log.c"
int main() {
    normal("going to RUN");
    warning("gggg");
    dangerous("adfasdf");


}


و فایل log.c :


#include <stdio.h>
#include <string.h>
// colors :
#define RED    "\e[31m"
#define GREEN  "\e[32m"
#define YELLOW "\e[33m"
// rest code :
#define REST   "\e[0m"


void println(const char *text){
printf("%s\n",text);
}
void normal(const char *text ) {
println(text);
}
void warning(const char *text) {
char final_msg[100];
strcat(final_msg,YELLOW);
strcat(final_msg,text);
strcat(final_msg,REST);
println(final_msg);
}
void dangerous(const char *text) {
char final_msg[100];
strcat(final_msg,RED);
strcat(final_msg,text);
strcat(final_msg,REST);
println(final_msg);
}



اما خروجی این بود :‌
going to RUN
gggg
ggggadfasdf

همون طور که میبیند gggg که مثلا برا هشداره دوبار داره نمایش داده میشه . و وقتی کد رو به این صورت تغییر دادم :‌

void dangerous(const char *text) {
char final_msg[100];
println(final_msg);
strcat(final_msg,RED);
strcat(final_msg,text);
strcat(final_msg,REST);
println(final_msg);
}


متوجه شدم که متغیر final_msg هنو مقداری رو داره که توی فانکشن بالایی مشابهش وجود داره و هنو همون مقدار رو داره . اما مگه تو سی متغیر ها از هم جدا نیستند ؟ چرا این اتفاق میوفته ؟‌
برای استعمار گران کاملا طبیعی است که با دینی هم اواز شوند . که به مردم می اموزد بخاطر بهشت موهوم در اسمان ، جهنم روی زمین را بی گلایه تحمل کنند .