Problem mit Strings
-
naja und wenn ich Nullen in bereich reinschreibe die mich nicht angehen?
muss der PC nicht wissen wo und wieviel speicher allokiert ist?
EDIT: Ochjö wie gemein^^
-
BorisDieKlinge schrieb:
void removeEnd(char *s,int n) { s= realloc(s,strlen(s)-n); }
EDIT: Hab in C schon ewig nichts mehr gemacht... deswegen das new/delete.. aber wen man wirklich nur ne 0 an der best. stelle setzen muss dann ok^^
Das wird genauso abschmieren wie deine new/delete Variante, wenn du die Funktion z.B. auf ein lokales char-Array loslässt.
@Speicherloch: Die Heap-Funktionen (malloc() und Co.) verwenden nicht die Stringende-Marken, um sich zu notieren, wie lang ein allokierter Block ist - die haben ihre eigenen Verwaltungsdaten. Und solange du da nichts zerstörst (Indexüberschreitungen o.ä.), ist es egal, was du mit dem Datenblock machst.
-
BitWax schrieb:
void CutEndOfString (char *lpString, int iCharsToCut) { int iStringLength = strlen (lpString); if (iStringLength < iCharsToCut) { strcpy (lpString, ""); return; } int iCutting = iStringLength - iCharsToCut; int i = iStringLength; while (i > iCutting) { lpString[i] = ' '; --i; } lpString[i] = '\0'; }
-
hmm ok verstehe
char *x= (char*)calloc(10,sizeof(char)); removeEnd(x,5); void removeEnd(char *&s,int n) { s= realloc(s,strlen(s)-n); }
wenn das so ausehen würde, würde ich dann nich 5 byte aufm heap freigeben, welcher später für andere gebraucht werden kann? Wenn ich das 5te elem auf \0 setze, sind trozdem noch die 10 bytes reserviert oder?
-
BitWax schrieb:
void CutEndOfString (char *lpString, int iCharsToCut) { int iStringLength = strlen (lpString); if (iStringLength < iCharsToCut) { strcpy (lpString, ""); return; } int iCutting = iStringLength - iCharsToCut; int i = iStringLength; while (i > iCutting) { lpString[i] = ' '; --i; } lpString[i] = '\0'; }
char *str = "hallo"; CutEndOfString (str, 3); // PENG :warning:
Auch schlecht
-
@Boris: Ja, sind sie - aber in deiner Funktion kannst du nicht feststellen, ob der übergebene String auf dem Heap liegt oder nicht:
char x[]="Hallo Welt"; removeEnd(x,5);//BUMM
@BitWix: Bei String-Literalen wird jeder Lösungsansatz scheitern
-
@BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis
-
BorisDieKlinge schrieb:
@BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis
Hast du was gesagt? Ich habe nur ein heucheln aus der hinteren Reihe gehört...
-
BorisDieKlinge schrieb:
@BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis
Nicht so tragisch, dafür wird's bei dir nix mit dem Programmieren. Naja, vielleicht in 10 Jahren mal
-
BorisDerSchlingel schrieb:
BorisDieKlinge schrieb:
@BitWax / BitWitch: Wohl auch ein Griff ins Klo... wir wohl nichts mit dem Nobelpreis
Nicht so tragisch, dafür wird's bei dir nix mit dem Programmieren. Naja, vielleicht in 10 Jahren mal
-
*meeeehhhhpppp" To many Loser exception!