PDA

View Full Version : یه مشکل عجیب



vakil_1365
سه شنبه 30 مرداد 1386, 00:47 صبح
سلام من برای درس کامپایلر دارم کامپایلر پاسکال رو با turbo c تحت داس می نویسم
به یه مشکل عجیب برخوردم دستور printf روند اجرای برنامه رو تغییر میده.
شاید بیشتر از 100 تا دستور strcmp استفاده کردم ولی تو یه تابع، کپی یه رشته تو یه آرایه برناممو به کل داغون می کنه هیچ error ای هم نمیده
من که حسابی گیج و خسته شدم به نظر شما می شه مشکل از turbo c باشه؟
اگه میتونید کمکم کنید.

amir_civil
سه شنبه 30 مرداد 1386, 10:47 صبح
سلام
اون قسمت که فکر میکنید مشکل دارید رو اینجا کپی کنید...

vakil_1365
سه شنبه 30 مرداد 1386, 17:18 عصر
ظاهرا مشکلی نداره من نمی دونم کدوم قسمت از برناممو بفرستم



int match(char *token){
int i;
if(!strcmp(token,strlwr(table[j].type)))
{if(index<(strlen(buf)-1))
{
j++;
i=scanner();
if(i<0)
return -2;
}
return 0;
}
strcpy(table[j].type,token);
return -1;
}


table[j].token یه char * سراسریه

vakil_1365
سه شنبه 30 مرداد 1386, 17:20 عصر
چون هنوز برناممو به استادم ندادم دوست ندارم فایل شو اینجا بذارم
ولی خوب اگه می تونین برام وقت بذارین به ایمیل تون بفرستم

someCoder
سه شنبه 30 مرداد 1386, 17:59 عصر
ممکنه ته رشته ها 0 حذف شده باشه و یا از طول رشته بیشتر استفاده شده باشه.

amir_civil
سه شنبه 30 مرداد 1386, 18:02 عصر
سلام
مشکل اینجاست

strcpy(table[j].type,token);
که باید به شکل زیر باشه

char *strcpy(
char *strDestination,
const char *strSource
);

emad_67
سه شنبه 30 مرداد 1386, 18:10 عصر
مشکل اینجاست


strcpy(table[j].type,token);


فکر نمیکنم مشکلی تو این قسمت باشه


table[j].token یه char * سراسریه

اگه به این صورت نوشتی


char *table[j].token

اینو به صورت یه آرایه بنویس ضمنا آرایتم باید ظرفیت مورد اندازه برای کپی رشته دوم تو رشته اول در دستور strcpy داشته باشه
ضمنا این کدت مشکل داره


if(!strcmp(token,strlwr(table[j].type)))

strcmp فقط مقدار 0 یا 1 بر نمیگردونه تا بشه نقیض اونو به دست بیاری البته مشکلی هم پیش نمیاد فقط تا زمانی که مقدار اون 0 نشه کد های داخل شزط اجرا نمیشه

saeid5977
چهارشنبه 31 مرداد 1386, 00:25 صبح
سلام
رفتارهای غیر عادی برنامه در 99 درصد موارد مربوط به خراب کردن حافظه است. ببین با ورودیهای مختلف تغییری تو رفتار برنامه پیدا میشه یا نه؟!

vakil_1365
چهارشنبه 31 مرداد 1386, 18:16 عصر
من ته تمتم رشته هامو چک کردم همشون null شدن(0\)
تمام اشاره گرهامم آرایه با فضای کافی گرفتم.
و برنامه هم درست کار می کنه به محض وارد کردن اون دستور strcpy(...) در تابع match
تا یه قسمت مشخصی جلو میره و دستورات رو طبق روال از فایل ورودی می گیره ولی یک دفعه وسط توابع بازگشتیم قاطی می کنه
وقتی trace کردم متوجه شدم که از یه جای برنامه کنترل اجرا بدون استفاده از دستور خاصی تغییر می کنه در صورتی که با حذف دستور strcpy مذبور مشکلی نداره