size_t Problem

Gast #4168724
Lesenswert?

Hagenbuch hat jetzt zugegeben, daß er ein Problem im Code hat:
1
void print( char *st, uint32_t x, uint32_t y, int32_t deg)
2
{
3
  int32_t stl;
4
  int32_t i;
5
  stl = strlen(st);
6

7
    const char *p = st;
8
    while (*p)
9
    {
10
        ++p;
11
    }
12
stl = size_t(p - st);
13
 ...
14
 ...
15
 ...
16
}
Führt zu:
 error: expected expression before 'size_t'
 stl = size_t(p - st);
       ^
make: *** [src/LCD480x272/UTFT.o] Error 1

Der Code wurde mal unter C++ compiliert, da gab's kein Gemecker, unter C 
aber schon. Warum?
Gast #4168745
Lesenswert?

Hagenbuch ist derjenige von dem man sagt, daß er erneut wie damals 
schon, also daß er erneut einer Einladung des Ministerpräsidenten zu 
einer zwanglosen Teestunde in einem zwanglosen Kreis mit zwanglosen 
Segeljachtbesitzern, Kulturschaffenden und Spitzensportlern, ähem, nicht 
nachgekommen sei.

sizeof() ist gut.
Danke.
Gast #4168767
Lesenswert?

Rene H. schrieb:
> Weil C keine size_t kennt, C++ aber schon std::size_t

C kennt auch size_t, dann fehlt vermutlich eher der passende Header 
(stddef.h z.B.), aber size_t ist ein Datentyp und kein Operator. 
sizeof() wiederrum gibt aber ein size_t zurück.
Der Code sieht auch nicht so aus, als wäre an der stelle sizeof gemeint 
gewesen. Da allerdings nicht zu sehen ist, was mit dem Wert noch gemacht 
wird...
Gast #4171667
Lesenswert?

Hüsch, Hans Dieter schrieb:
> int32_t stl;
>   int32_t i;
>   stl = strlen(st);

Das ist übrigens auch ein Problem. Was, wenn man den Code auf x86 oder 
gar x86_64 kompiliert? Dann ist ein int32_t zu klein für eine String 
Größe. Für die Größe von Datenstrukturen im RAM nimmt man size_t , das 
hat je nach Plattform automatisch die richtige Größe. int32_t nur 
manchmal (auf Plattformen mit <2GB Adressraum, also zB 16Bit Plattformen 
wie AVR. Hier könnte man aber auch effizienter einen 16bit unsigned 
integer verwenden, bzw. gleich size_t).
#4171683
Lesenswert?

Dr. Sommer schrieb:
> Hüsch, Hans Dieter schrieb:
>> int32_t stl;
>>   int32_t i;
>>   stl = strlen(st);
>
> Das ist übrigens auch ein Problem. Was, wenn man den Code auf x86 oder
> gar x86_64 kompiliert? Dann ist ein int32_t zu klein für eine String
> Größe.

Wenn man denn einen String braucht, der länger als 2 Milliarden Zeichen 
ist. In so einem Fall würde ich aber auch nicht mehr mit "platten" 
Arrays aus char und strlen arbeiten, denn das wird dann irgendwann etwas 
zäh.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren