[elektro] C -- illegal pointer hiba
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Wed Sep 25 19:09:33 CEST 2013
Nagyon gyanús, hogy az strlen-nel van a baj, csak azt nem értem, hogy miért
nem cost * char-t fogad a te strlened. Azt is vetted valahonnan, vagy a
gyárit használod? Mert minden valamire való C környezetben az strlen(const
char *). Így bármit át lehet neki adni.
Lehet, hogy csak egy #include <string.h> hiányzik az elejéről? És akkor
rájönne, hogy constnak van deklarálva.
Szabolcs
E
2013. szeptember 25. 18:58 elight at gmail.hu írta, <elight at gmail.hu>:
>
> Nagyon köszi..
> a kis fejtágítást.
>
> Igy már sokkal világosabb..
> És bevallom már értem,
> amit ösztönösen elkövettem,
> hogy (*s ) et írok be az SPI-nek..
> Ugy ment , de a kérdés mégis megmaradt bennem.
> Azért is hoztam szóba.
>
> Már éppen azon morfondíroztam,
> hogy felfújom a pofám és írok
> egy karakter számoló ciklust helyette..
> De akkor esetleg a típus kényszerítéssel is próbálkozgatok..
> Ebből annyi már bejött, hogy az "strlen" -emnek valamiért
> nem engedi a "const" típusmódosítást..
> Lehet itt lenne a bibi . ? .
>
> Üdv István
>
>
> 2013-09-25 18:47 keltezéssel, SZIGETI Szabolcs írta:
> > Hali!
> >
> > Olvasd el, amit előbb írtam. Ha a te strlen-ed valóban char *-ot vár,
> akkor
> > annak nem adhatsz át const char*-ot. Elvileg a fordító nem fogja engedni,
> > hogy nem const pointernek átadjál const-ot, hiszen a const célja pont az,
> > hogy jelezze, nem változtathatod meg.
> > De az érdekes, hogy az strlen nem const*, mivel azokat a függvényeket,
> amik
> > nem hatnak vissza a pointeren keresztül mindig cons*-nak szokták
> > deklarálni. Hiszen annak sima és const pointert is adhatsz, ráadásul
> plusz
> > biztonságot jelent, a függvény fejlesztése során, mert véletlenül sem
> fogsz
> > visszafelé változtatni a paramétereken keresztül.
> >
> > Ha az SPI1_Write unsigned short -ot vár, akkor nem kell segédváltozó,
> simán
> > a *s-et át kell tudnod adni, a fordító megoldja magától, hogy short-ot
> > csináljon a char-ból. Ahol egyértelmű az automatikus konverzió, ott a
> > fordító megcsinálja. Ahol nem, de értelmes, ott pedig castokkal magad
> > kényszerítheted.
> >
> > Szabolcs
> >
> >
> >
> > 2013. szeptember 25. 18:37 elight at gmail.hu írta, <elight at gmail.hu>:
> >
> >> Köszi, megnéztem ..
> >>
> >> és nem , hanem
> >>
> >> unsigned short data
> >>
> >> ezek szerint egy változóba át is kellene szedegetnem
> >> kilökés előtt..
> >>
> >> A példa program meg valószínűen pointeres
> >> SPI átadást használhatott. Majd kiguberálom
> >> belőle , hogy beigazolódjon.
> >>
> >> Történt , hogy egy nagy terjedelmű c++ -os
> >> programból operálok át részeket PIC ben...
> >> és már csak a stringes pointer aritmetika az
> >> amin kerengek mint a gólya...
> >>
> >> Akkor legalább ez már megvan.
> >>
> >> De az
> >>
> >> int strlen( char * )
> >>
> >> definiciójú függvényt is
> >> kidobja illegál-ra
> >>
> >> A tényleges sor ami galibát okoz ilyesmi..
> >>
> >> CMD_Text( unsigned int x; unsigned int y ; unsigned int chartype ;
> >> const char *s )
> >> {
> >> CMD_Start_WR( SMD_SIZE*3 + strlen( s ) + 1 ); // itt fut az
> >> "illegal pointer conversion" hibára ,
> >> // a többi sor ha kihagyom ténylegesen jól lefut,
> >> // csak éppen a parancs megnyitás kimarad.
> >> CMD_Funct_Send32( SMD_TEXT ) ;
> >> ...
> >> }
> >>
> >>
> >> 2013-09-25 18:21 keltezéssel, Bali Zoltan írta:
> >>> Hali!
> >>>
> >>> Az "SPI1_Write( s )" is pointert vár?
> >>>
> >>>
> >>> Üdv. Zoli
> >>>
> >>> 2013. 09. 25. 17:50 keltezéssel, elight at gmail.hu írta:
> >>>> Sziasztok..
> >>>>
> >>>> Ezt miért dobhatja ki a mikroC fordító?
> >>>>
> >>>> void Funct_SendSTR( const char *s )
> >>>> {
> >>>> do
> >>>> {
> >>>> SPI1_Write( s ) ; // ezen soron "illegal pointer
> >> conversion"
> >>>> } while ( *s++ != 1 );
> >>>>
> >>>> }
> >>>>
> >>>>
> >>>> meg azt is kidobja pl hogy
> >>>>
> >>>> if( strlen( s ) == x )
> >>>> {
> >>>>
> >>>> }
> >>>>
> >>>> más C nyelvben ez menni szokott?
> >>>> vagy nagyon benézek valami?
> >>>>
> >>>> a 'const' mindenképpen szükséges.
> >>>> hogyan írnátok helyesen?
> >>>>
> >>>>
> >>>> Az is kérdésem hogy
> >>>>
> >>>> ( char * s ) és ( char *s )
> >>>>
> >>>> az ugyanaz, sajnos ezek a pointeres témák
> >>>> általában összegabajodnak bennem.
> >>>>
> >>>>
> >>>>
> >>>> Üdv István
> >>>>
> >>>> -----------------------------------------
> >>>> elektro[-flame|-etc]
> >>>>
> >>>>
> >>>>
> >>> -----------------------------------------
> >>> elektro[-flame|-etc]
> >>>
> >> -----------------------------------------
> >> elektro[-flame|-etc]
> >>
> > -----------------------------------------
> > elektro[-flame|-etc]
> >
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list