Cóż skoro chcesz pisać to w C, za pomocą Buildera to faktycznie musisz użyć char*. Jednak taki kod jak pokazałeś jest trochę zły. Niby caly algorytm jest napisany w "C", ale korzystasz z metod VCL, więc bardziej to taka sztuka dla sztuki. Jeśli już chcesz coś zrobić pisząc w czystym C i korzystać z graficznego GUI jaki daje Builder to zamiast pakować całość w if'a wydziel to do odrębnej funkcji. Będzie łatwiej, czytelniej i bardziej poprawnie. Zatem napisz funkcję taką:
int Zamiana(char *PodanaLiczba, int *LiczbaDziesietna)
{
int DlugoscLiczby = strlen(PodanaLiczba);
for (int i = 0; i < DlugoscLiczby; i++)
{
if(PodanaLiczba[i]=='0'||PodanaLiczba[i]=='1'||PodanaLiczba[i]=='2')
continue;
else
{
return 0;
}
}
*LiczbaDziesietna = 0;
int Licznik = strlen(PodanaLiczba) - 1;
int i = 0;
int cyfra;
while(Licznik>=0)
{
cyfra = PodanaLiczba[Licznik] - '0';
*LiczbaDziesietna += cyfra * pow(3,i);
i++;
Licznik--;
}
return 1;
}
if (ComboBox1->ItemIndex == 1)
{
char *PodanaLiczba = (char*)malloc(Edit1->Text.Length());
int LiczbaDziesietna;
sprintf(PodanaLiczba,"%s",Edit1->Text.c_str());
if (Zamiana(PodanaLiczba,&LiczbaDziesietna))
Edit2->Text = IntToStr(LiczbaDziesietna);
else
Edit2->Text = "BLAD ZAPISU";
free(PodanaLiczba);
}
Pisane z palca, ale powinno dobrze działać, chociaż nie testowałem. Od razu widać co jest co, a sama funkcja zmieniająca na liczbę dziesiętną jest napisana w samym C. Co do zarządzania pamięcią, to jest ok. Ogólnie to można by się przyczepić do wywołania malloc, ale generalnie jest ok.