[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