PDA

View Full Version : مشکلی با itoa



A_Salimi
دوشنبه 02 اردیبهشت 1387, 10:41 صبح
سلام

با یک مشکل مواجه شدم که دلیلشو نمیدونم !!! من یک مقدار CString رو به عدد تبدیل میکنم بعد یک واحد بهش اضافه میکنم و دوباره برمیگردونمش به CString . اما نمیدونم چرا وقتی به 10 میرسه در اضافه شدن بعدی به جای 11 دوباره یک تولید میشه ؟ یعنی در زمان تبدیل به CString عدد 10 به a تبدیل میشه (کد زیر رو در حالت دیباگ ببینید) .





// define 8 as string
CString a=_T("8");
char ch[10];
char h[10];
//for loop for view changes
for(int i=1;i<5;i++){
//convert cstring to char*
sprintf(ch, "%s",a);
//convert string to integer
int counter=atoi(ch);
//increment
counter ++;
//convert integer to char* and then convert to CString
CString b(itoa(counter,h,36));//when counter is 10 b value is “a”!!
a=b;
}


لطفا دلیلشو بگید و بگید که چطور میتونم اعداد بزرگتر از 9 رو تولید کنم ؟
با تشکر

Nima_NF
دوشنبه 02 اردیبهشت 1387, 16:08 عصر
برای اینکه در itoa عدد خروجی به درستی تبدیل شود باید پارامتر سوم 10 باشد (یعنی بر مبنای 10) که شما اشتباها 36 قرار داده اید:



CString b(itoa(counter,h,10));

ضمنا با توجه به استفاده از T_ در صورتی که پروژه به صورت یونیکد کامپایل شود چون از char استفاده کرده اید اعداد اشتباهی تبدیل می شوند پس یا پروژه را به صورت غیر یونیکد کامپایل کنید و یا برای یونیدکد به صورت زیر با استفاده از TCHAR و معادل های یونیکد توابع انجام دهید:



CString a=_T("8");
TCHAR ch[10];
TCHAR h[10];

for(int i=1;i<5;i++){

_stprintf(ch, _T("%s"),a);

int counter=_tstoi(ch);

counter ++;

CString b(_itot(counter,h,10));
a=b;
}