String kürzen
-
Du hast einen buffer, von welchem strlen() dir 4 zurueckgibt. Du hast davor die \0 jedoch auf die 5te stelle des buffers geschoben. D.h. du kennst den Wert der anfaenglichen initialisierung des Buffers nicht mehr. Der buffer koennte 10byte lang sein, oder 1024.
Ich weiß genau, wie lang der Puffer ist. Was mir strlen zurückgibt, interessiert mich gar nicht. Wenn ich mir die Länge eines Puffers merken muss, dann nutze ich dazu eine separate Variable, nicht strlen. Das ist nicht der Sinn und Zweck von strlen.
Wenn du strlen zur Bestimmung von Pufferlängen benutzt, dann ist klar, dass du nach jeder Änderung der Stringlänge realloc machen musst. Das liegt aber daran, dass strlen dafür ein ungeeignetes Werkzeug ist.
Du brauchst auch jedesmal neue Radmuttern, wenn du zum Radwechsel die Bohrmaschine benutzt.
-
[0x[90]| schrieb:
Ich meine mit verlieren, dass man ihn wohl nicht mehr verwenden kann, da man nicht weiss wie weit der Speicher noch reicht. Du hast einen buffer, von welchem strlen() dir 4 zurueckgibt. Du hast davor die \0 jedoch auf die 5te stelle des buffers geschoben. D.h. du kennst den Wert der anfaenglichen initialisierung des Buffers nicht mehr. Der buffer koennte 10byte lang sein, oder 1024.
Na und? Früher oder später machst du ein free oder ein realloc, weil du eine andere Operation machst bei der sich das lohnt und dann ist der Speicher wieder in Ordnung. Ein realloc braucht Zeit, das sollte man IMHO nicht bloß wegen einem popeligen Zeichen bemühen.
-
MFK schrieb:
Du brauchst auch jedesmal neue Radmuttern, wenn du zum Radwechsel die Bohrmaschine benutzt.
ROFL!
-
[0x[90]| schrieb:
Es ging aber doch darum, dass man den Speicher nach \0 verliert, wenn man nicht weiss wie gross der Puffer wirklich ist. D.h: Wenn \0 am Ende gesetzt ist, weiss ich wie gross er ist, strlen().
Das find ich ja mal amüsant. Benutzt du immer strlen zum Ermitteln der Länge eines Puffers? Was ist, wenn du mal keinen Puffer von char's hast? Oder ein Element kann einen gültigen Wert 0 haben?
Nochmal, nur weil man das Nullzeichen verschiebt geht kein Speicher verloren. Und wie gross der ursprüngliche Puffer ist, weisst du immer:short a[100]; long* b = malloc(200 * sizeof(long));
Wieviele Elemente hat nun a, und wieviele b?
-
Uff, nein. Ich nutze es nicht. Die Frage war auch nur allgemein erstellt. Ausserdem sage ich nicht, dass Speicher in dem sinne verloren geht sondern einfach nur dass man (bis zu einem realloc o.ae.) nicht mehr auf den kompletten String zugreifen kann.
-
[0x[90]| schrieb:
Ausserdem sage ich nicht, dass Speicher in dem sinne verloren geht sondern einfach nur dass man (bis zu einem realloc o.ae.) nicht mehr auf den kompletten String zugreifen kann.
Was denn nun? String, Puffer? Irgendwie hab ich das Gefühl, du verstehst das wirre Zeug, das du von dir gibst, selbst nicht mehr.
Du kannst auf den Speicher, den du irgendwann mal reserviert hast, egal ob Stack oder Heap, komplett zugreifen. Und das völlig unabhängig davon, wo denn nun irgendein Nullzeichen ist.
-
Omg, nun lasst es doch mal gut sein. Das hat sich doch schon geklaert.
Mit allokieren und dem Kram hat strlen eh nichts zu tun, demnach: vergiss es.
Und in meinem letzten Satz meinte ich natuerlich Buffer, nicht String. Kommt davon wenn man es 10 mal erklaeren muss...
-
[0x[90]| schrieb:
Omg, nun lasst es doch mal gut sein. Das hat sich doch schon geklaert.
Mit allokieren und dem Kram hat strlen eh nichts zu tun, demnach: vergiss es.
Und in meinem letzten Satz meinte ich natuerlich Buffer, nicht String. Kommt davon wenn man es 10 mal erklaeren muss...auch mit Buffer ist dein letzter satz völliger blödsinn.
MfG
-
Ok danke, ich hab's jetzt hinbekommen (Nicht zuletzt dank des Hilfreichen Tipps von Black Shadow__ )
-
Wow nach über einen Jahr!!! Man bist du schnell!!! ich bin Anfänger, ich hoffe das, das bei mir nicht so lange dauert...