
C - strtol praca z retazcami
Dobre ranko neviete mi poradit s fukciou strtol? Viem ze meni retazec cisiel na premennu typu int a aj ze z ktorejkolvek sustavy do desiatkovej ale ako zistim ked mam napriklad retazec cisiel 100113 a dam sustavu dvojkovu cize n=2 program ma upozorni a vypise do premennej chybnyZnak cislo 3 a napise cislo co sa mu podarilo premenit. Ako ale zistim na ktorom mieste chybne cislo retazca bolo a aka cast cisla bola vyuzita na premenu? A ak chybne cislo v retazci nieje ako zapisem iba cislo co to naslo bez vypisania chybneho cisla ked neexistuje? Co mam dat do if?
Alebo strtol ma aj pointer na endpointer, tak ti oznami kde skoncil.
Nevies kde tu mozem mat chybu?? chcel som zistit na kolkej cifre nasiel program nepovolene cislo dalej ake cislo tym padom premiena.
cislo=strtol(*znakyPole,&chybnyZnak,n);
printf("%d\n",cislo);
if(chybnyZnak[0]!='\0')
{
for(i=0;i<pocetPrvkov;++i)
{
*(povoleneZnaky+i)=*(znakyPole+i);
if(*(znakyPole+i)==chybnyZnak)
{
printf("V cisle %s bol na pozicii %d zisteny nepovoleny znak:%c",*znakyPole,i,*chybnyZnak);
printf("Na prevod bola vyuzita len cast cisla %s. Ziskane cislo:%d",povoleneZnaky,cislo);
}
}
}
Ked sem nevlozis kompletny zdrojak aj deklaracie aj ze co to je pocetPrvkov a odkial mas hodnotu tak sa neda ani jasnovidecky dedukovat ze kde mas jaku chybu. Kde mas chybu ti vypise compiler alebo to dedukujes podla spravania prograu.
chybnyZnak musi byt deklarovany ako
char* chybnyZnak;
naco tam mas ten for cyklus som nepochopil, priamo *chybnyZnak je ten chybny znak.
ked testujes znak tak musis testovat s *chybnyZnak ptz chybnyZnak je char*
if(*(znakyPole+i) == *chybnyZnak)
Do strtol sa nedava ziadne dereferencia ale priamo pointer na string
cislo=strtol(znakyPole,&chybnyZnak,n);
Lepis bez rozmyslania nahodne nejake hviezdicky, ved ti compiler musi pisat na kazdom riadku error. bud vies co tymi hviezdickami robis alebo to nerob vobec.
A kvoli citatelnosti sa nepise
*(povoleneZnaky+i) ani *(znakyPole+i)
ale
povoleneZnaky[i] a znakyPole[i]
Ten zdrojak je dost velky a komplikovany to by sa ti nechcelo urcite lustit ale mam problem ze chcem vediet na akom mieste v retazci sa ten zly znak nachadza skusal som to cez strchr ale ta chce smernik toho retazca ale ja ho mam ako smernik na smernik lebo to mam vo funkcii tak vobec neviem ako by som tu polohu zanku dokazal zistit
P.S: a nemas ziaden smernik na smernik. Len do parametra ho vytvoris pomocou & aby mohla ta funkcia ten pChybnyZnak (smernik na char) zmenit.
jaj uz chapem diky :)