[elektro] C -- illegal pointer hiba

SZIGETI Szabolcs szigiszabolcs at gmail.com
Wed Sep 25 18:53:07 CEST 2013


Hali!

Ja, még valami: ha C++-ból szedegetsz át C-be, akkor néha lehet nagyot
szivacsolni, mert a két nyelv nem kompatibilis alulról, cserébe van olyan,
ami lefordul mindkét nyelven, de mást csinál.
Amúgy meg kérdezz, hogy mi nem megy a pointeraritmetikában meg a
stringekben, mert nem nehéz, csak meg kell jönnie a homlokracsapós "hát
persze, milyen egyszerű" pillanatnak, csak a C nyelv nem túl segítőkész
ebben.

Szabolcs



2013. szeptember 25. 18:47 SZIGETI Szabolcs írta, <szigiszabolcs at gmail.com>:

> 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