[elektro] C -- illegal pointer hiba

SZIGETI Szabolcs szigiszabolcs at gmail.com
Wed Sep 25 18:47:51 CEST 2013


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]
>


More information about the Elektro mailing list