Teilstring um ein paar Zeichen nach vorne schieben.
-
Hallo Leute,
könntet Ihr mir nochmal helfen? Ich habe mit malloc einen String erstellt. Nun möchte ich die ersten Zeichen aus diesem String entfernen. Wenn ich den Zeiger einfach etwas nach vorne rutschen lasse wäre mein Problem gelösst. Das Problem wäre doch dann aber den Speicher wieder frei zu geben, oder? Da doch free() den original zurueckgegebenen Pointer von malloc() erwartet oder? Gibt es also eine einfache Funktion die den String einfach um ein paar Zeichen nach vorne verschiebt? Momentan gehe ich ueber einen Buffer und kopiere dann die Sachen an die richtige Stelle zurück. Ist mir aber alles ein bißchen zu blöd....
Viele Grüße
Frederik
-
memmove kann ohne zusatzbuffer kopieren.
-
Hallo Volkard,
vielen Dank für den Tip.
Viele Grüße
Frederik
-
@Frederik
Eine andere Möglichkeit wäre noch gewesen einfach einen zweiten Zeiger zu deklarieren, auf die entsprechende Stelle zu setzen und dann damit weiterzuarbeiten.
-
AJ schrieb:
@Frederik
Eine andere Möglichkeit wäre noch gewesen einfach einen zweiten Zeiger zu deklarieren, auf die entsprechende Stelle zu setzen und dann damit weiterzuarbeiten.ein zweiter zeiger wäre einfach zu unhandlich, den jedesmal mitübergeben zu müssen.
meine lösung für lange strings, wo man oft abschlippelt://wie immer ungetestet char* mallocMagicString(size_t size) { char* str=(char*)malloc(size+1); *str='\0'; return str+1; } void freeMagicString(char* str) { --str; while(*str!='\0') --str; free(str); }
dann könnte man fein sich nen string anlegen mit
char* str=mallocMagicString(13);
ihn vollmachen mit
strcpy(str,"autoexec.bat");
den anfang abschnippeln
while(*str!='.') ++str; ++str; printf("die dateinamenerweiterung war %s",str);
und ihne trotzdem sauber löschen
freeMagicString(str);
-
@volkard
Und du meinst wirklich das haut so hin??Es kommt ja auch immer darauf an was man machen will. Allerdings verstehe ich nicht was gegen einen zweiten Zeiger spricht, aber egal.