[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