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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.