PDA

View Full Version : atoi



marall80
شنبه 16 آذر 1387, 14:36 عصر
این و ایراد می گیره میشه بگین مشکل کجاست؟ if(atoi((char *)value) == 0

mehdi.mousavi
شنبه 16 آذر 1387, 15:20 عصر
این و ایراد می گیره میشه بگین مشکل کجاست؟ if(atoi((char *)value) == 0



سلام.
لطفا بفرمایید value رو از چه Data Type ای تعریف کردید؟

marall80
یک شنبه 17 آذر 1387, 08:14 صبح
unsigned char

mehdi.mousavi
یک شنبه 17 آذر 1387, 11:03 صبح
unsigned char

بسیار خوب. Expression شرط رو باید اینطور بنویسید:


atoi((CONST CHAR *)value)

marall80
یک شنبه 17 آذر 1387, 13:57 عصر
unsigned char value[100
مثلا "0" توی value و POS_DISABLED صفر است

if(atoi(( char *)value) == 0)
config.pos_status = POS_DISABLED;
ایراد میگیره اونی که شما گفتین هم کردم نشد

emad_67
یک شنبه 17 آذر 1387, 14:09 عصر
فکر میکنم به خاطر اینکه unsigned char نوع دادش با char فرق میکنه نمیشه اونو به atoi فرستاد. (البته بازم شک دارم)
شما چرا unsigned تعریف کردی حالا؟
اگر char تعریف کنی مشکلی پیش نمیاد.


char value='0';
if(atoi(&value)==0)
cout<<"ddddddd";
البته این vs2005 نمیدونم چرا گیر میده وقتی اینجوری مینویسم:


char value='0';
if(atoi((char*)value)==0)
cout<<"ddddddd";
البته کامپایل ارور نداره ولی run time error میده. دوستان اگه کسی میدونه بگه فرقی باهم دارن؟

Nima_NF
یک شنبه 17 آذر 1387, 14:48 عصر
تذکر 3 : کاربران جدید در هنگام ارسال سوال خود (مثلا در مورد خطایی که در برنامه ایجاد می شود) حتما موارد زیر را ذکر کنند تا سایر کاربران بتوانند به راحتی و بدون ارسال مجدد پاسخ شما را بدهند:

1- حتما نام کامپایلر مورد استفاده شما به همراه شماره نسخه آن بیان شود.

2- حتما پیام خطای کامپایلر نیز در کنار سوال قرار داده شود (در صورت طولانی بودن بخشی از آن)
از آنجایی که بسیاری از خطاها، معروف و ساده هستند به این شکل دیگر نیاز نیست برنامه توسط کاربران کامپایل شود تا خطای آن معلوم شود.تذکر فوق برای سوال شما صادق هست، پس حتما موارد فوق را ذکر کنید. چرا که به هزاران دلیل و در نسخه های مختلف کامپایلرها می تواند خطا داده شود.

در هر حال در صورتی که value یک رشته است، فقط نام آن را ارسال کنید و نیاز نیست به طور ضمنی به char* تبدیل کنید.



char value[12] = "0";

if( atoi (value) == 0 )
// ...

value هم باید از نوع رشته باشد، یعنی با char نه unsigned char
چون می خواهید کارکتر ها را در آن تعریف کنید(معادل عددی آن ها را) و به بازه آن هم کاری ندارید.


البته کامپایل ارور نداره ولی run time error میده. دوستان اگه کسی میدونه بگه فرقی باهم دارن؟ پارامتر تابع atoi یک اشاره گر ثابت (const) به رشته است که انتهای آن باید با 0\ یا هر کارکتر غیر عددی مشخص شود تا خواندن اطلاعات متوقف شود، پس حتی نوشتن حالت اول شما هم غلط و هم خطرناک هست. درست آن به همان شکل فوق است که حداقل یک رشته تعریف کنید.(مثلا با حداقل 2 خانه)

mehdi.mousavi
یک شنبه 17 آذر 1387, 14:48 عصر
unsigned char value[100
مثلا "0" توی value و POS_DISABLED صفر است

if(atoi(( char *)value) == 0)
config.pos_status = POS_DISABLED;
ایراد میگیره اونی که شما گفتین هم کردم نشد

سلام.
الان شما به من بگید از این کد ایراد میگیره یا نه:



BYTE value[100] = {NULL};
value[0] = '2';
int a = atoi((CONST CHAR *)value);
بعد خط آخر، a باید مساوی 2 باشه! اگر از این کد ایراد میگیره، لطفا بنویسید جه ایرادی!