[elektro] C -- illegal pointer hiba

Fuzesi Arnold arnold.fuzesi.lista at gmail.com
Wed Sep 25 18:58:48 CEST 2013


cast?

SPI1_Write(  (char*)s );

A.

On 09/25/2013 06:47 PM, SZIGETI Szabolcs wrote:
> 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]
> .
>



More information about the Elektro mailing list