größe eines Char Array pürfen
-
Folgendes:
void foo(char *pc){ strcpy(pc,"....................."); } void bar(){ acDest[100]=""; foo(acDest); }
nun darf die zeichenkette, welche in foo ind acDest kopiert wird nicht die 99 zeichen marke überschreiten.. wie kann ich das prüfen ob es reicht?
-
Wie lang die Zeichenkette ist, kannst du mit strlen() erfragen, wie lang sie sein darf, mußt du dir selber merken.
(in der aufrufenden Funktion bar() kannst du die Arraygröße noch per sizeof(acDest) herausfinden, wenn du sie vergessen hast - in der foo() nicht mehr)
-
ok gut, das dachte ich mir schon... wie wird es bei anderen C funcitonen gelöst, welche im gleicehn prinzip ihere daten zurückgeben?
könnte ja in foo mit malloc den speicher holen, allerding ist nie gewährleisten das er wieder freigegben wrid..
wie löst es die funktion strcpy(); bei dieser muss ja sicher sein das das zieharry groß genug ist?
-
Die Funktionen der C Standardbibliothek lassen sich entweder die Maximalgröße mitgeben (strncpy() oder memcpy()) oder tun so, als ob ausreichend Platz vorhanden wäre (strcpy()) - im letzteren Fall fliegt dir vermutlich dein Programm um die Ohren, wenn der Platz nicht ausreicht.
-
super.. wenn die std. c function davon ausgehen das es reicht, mach ich das auch
-
Besser nicht - außer du weißt sehr genau, daß du ausreichend Platz hast. Im Ernstfall solltest du lieber die "abgesicherten" Varianten der C-Funktionen verwenden (z.B. strncpy())
-
ja , ist ein simpler code.. theoretisch bin ich mir sicher das es reicht.. es geht um pfad+file name, und habe dafür 256 Byte reserviert....
aber ich mache forsichthalber
void fnoo(char *pcDest,long size){..............}
-
Eine sehr weise Entscheidung.