[elektro] C -- illegal pointer hiba
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Thu Sep 26 15:55:01 CEST 2013
Aha, OK, Így már értem. tehát a lezáró 0-t is ki kell mindig küldeni, akkor
rendben van.
Viszont ha kell a lezáró nulla, akkor különösen vigyázz, mert ugye az
elvben része a C stringnek, tehát a különböző string manipuláló függvények
máshogy kezelhetik. Pl. az strlen nem számolja bele a string hosszába,
mégis ott van. (strlen("") értéke 0), pedig az "" az 1 bájtot foglal a
memóriában.
Ez persze nem gond, csak figyelni kell rá. Sajnos a C nem
string-manipulációra született.
A fenti példádban pl. lehet, hogy érdemesebb külön, kézzel kiküldeni a
nullát, és nem a string végéről szedni, mert ha később valaki olvassa a
kódot össze fog zavarodni, mint én, ha nem tudja, hogy kell a 0 is.
Szabolcs
2013. szeptember 25. 19:50 elight at gmail.hu írta, <elight at gmail.hu>:
> Bocsi, elütöttem, de csak nektek..
>
> tehát:
> while ( *s++ != 0 ); // áll a végén
>
> Amig a while elől volt, jogosan az első chr is lemaradt,
> mert a kiküldés előtt növete a pointert.
> Ezért raktam a végére , hogy 0 val is lefusson,
> és egy üres karaktert '\0' is kiadjon..
> A cooprocnak nem csak a string kell ,
> hanem a lezáró nulla, sőőt cifrább kicsit,
> mert minden stringet utána még nullákkal a
> négybyte-os határra ki kell egészíteni ,
> és onnan-tól jöhet csak az új utasítás.
> Ezt tanálta ki az FTDI... Ezen szívok..
> De már agyilag jobban sínen van ...
>
> Üdv István.
>
>
>
>
> 2013-09-25 19:39 keltezéssel, SZIGETI Szabolcs írta:
> > Hali!
> >
> > Ha csak az első pár karakter megy ki, akkor szerintem ott a hiba, hogy
> > rosszul detektálod a string végét.
> >
> > Ez a te függvényed:
> >
> > void Funct_SendSTR( const char *s )
> > {
> > do
> > {
> > SPI1_Write( s ) ; // ezen soron "illegal pointer
> conversion"
> > } while ( *s++ != 1 );
> >
> > }
> >
> >
> > Ez addig fog menni, amíg a s pointer nem mutat egy 1 értékű bájtra,
> aminek
> > valószínűleg nem sok értelme van. Ráadásul az üres stringen elhasal.
> >
> > Próbáld meg ezt:
> >
> > void Funct_SendSTR( const char *s )
> > {
> > while (*s!=0) /* ha igazán szép akarsz lenni,l akkor *s!='\0' -t
> írsz,
> > mivel a '\0' a null karakter. */
> > {
> > SPI1_Write(*s);
> > s++;
> > }
> > }
> >
> > A C ben string igazából nincs, az egy char-ra mutató pointer, ahol egy 0
> > érték jelzi a string végét. Az üres string egy 0 bájtból áll. Az "abc"
> > string a memóriában úgy néz ki, hogy 'a', 'b', 'c', 0. tehát 4 bájt.
> >
> > A fenti függvény azt csinálja, hogy amíg az s által mutatott bájt nem
> > nulla, addig azt a bájtot kiküldi az SPI-n és egyel növeli a pointer
> > értékét, tehát veszi a következő értéket. Az üres stringre is működik,
> > mivel ekkor már az első iteráció sem fut le a while miatt és nem küld ki
> > semmit.
> >
> > Már feltéve, hogy ezt kell a programodnak csinálni, nem tudom.
> >
> >
> > Szabolcs
> >
> >
> >
> > 2013. szeptember 25. 19:26 elight at gmail.hu írta, <elight at gmail.hu>:
> >
> >> Gyári kódos mikroC-t használok régóta..
> >> elég nagy gyakorlattal,
> >> ebben nagyonnagy részben meg is bízok.
> >> ( Ez tehát kiesett, de azért Ők se tévedhetetlenek.
> >> néha bogarászni kellett ASM-ben is.. )
> >>
> >>
> >> Általában ha bepipálok egy libraryt ,
> >> az be is fordítja.. Csak a sajátokat kell def-ni..
> >> Meg van egy buil_in.h , de azt alapból be szoktam.
> >>
> >> Ahogy azSPI1_Write
> >> az strlen is megy *s -el... sima s-el pedig nem.
> >> pedig pointeres a meghatározás..
> >> Jleneleg ugy fordul és fut a progi, de hibásan.
> >> Amire nem jöttem rá, hogy a string első pár
> >> betűje megy ki csak a modulban, és időnként
> >> a widget-em kiírása behülyül..
> >> És ez csak a TXT-t is tartalmazó ( pointeres )
> >> vidgetek-nál fordul elő !..
> >> Ha azokat kilövöm, a többi grafikai elem jó!
> >> Ez nyomozgatom..
> >>
> >> Köszi mindenkinek, kaptam jó ötleteket..
> >> Holnap majd bogarászom, megpróbálgatom
> >> sorra...
> >>
> >> Üdv István
> >>
> >>
> >>
> >>
> >>
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list