while schleife funktioniert nicht (s muss änderbarer Ivalue sein)
-
@Platinumer
das s++ musst du dann weglassen. mit s[i] greifst du auf das i-te element zu. also ein programm, um ein zeichen aus einem array zu löschen, könnte dann so aussehen:int main() { char array[100] = "Dies ist ein Test."; unsigned int pos; unsigned int i; printf("Welches Zeichen moechten Sie loeschen?\n"); scanf("%u", &pos); for(i = pos; array[i] != 0; i++) { array[i] = array[i + 1]; } printf("%s\n", array); return 0; }
normalerweise musst du da aber noch die position gegen die länge prüfen, aber das habe ich jetzt mal weggelassen.
-
Okay das mit der Schleife hab ich gelöst bekommen. Hab eine kleine seperate Funktion geschrieben.
Jetzt bleibt nur noch das Problem mit dem "Zeichen an Position löschen". Probiere deine Idee gleich mal aus @Wade1234@Wade1234 hat geklappt, danke
-
ich finde, dass du nicht mit zeigern arbeiten solltest, solange du nicht mit arrays arbeiten kannst.
-
Dieser Beitrag wurde gelöscht!
-
@Wade1234 sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
ich finde, dass du nicht mit zeigern arbeiten solltest, solange du nicht mit arrays arbeiten kannst.
lool
-
void myStrChrDeleteByPosition(char *s,int i) { for(char *p=s+i;*s=s[s>=p];++s); }
-
@Platinumer sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
muss ich also den definierten string, char [] = "string" anders schreiben um ihn ändern zu können?
Du kannst jederzeit einen weiteren Zeiger auf das Array zeigen lassen.
So wie du es versuchst, würde die Information über den Anfang des Arrays verloren gehen.
-
@Wutz: Nicht sehr effizient für lange Strings mit hohem Index (aber dafür konstant je String ;- ).
-
@Sarkast sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
Was du wirklich brauchst, ist überdies https://man.cx/strcpy
strcpy()
hat für sich überlappende Speicherbereiche UB, ist also für das "Löschen" in-place nicht geeignet.
-
@Swordfish Du hast völlig recht, die ganze Familie mag kein Overlapping.
-
@Sarkast sagte in while schleife funktioniert nicht (s muss änderbarer Ivalue sein):
@Swordfish Du hast völlig recht, die ganze Familie mag kein Overlapping.
memmove verträgt es.