String Byteweise kopieren ohne strcpy
-
mamamumu schrieb:
Programm stürzt dennoch ab:/
Das wird daran liegen, dass %s der falsche Formatspecifier für ein
char
ist.Für einzelne Zeichen bietet sich
putchar
an.
http://www.cplusplus.com/reference/cstdio/putchar/
-
OMG
ja da wäre das c wohl besser gewesen danke. Hab ich volle übersehen.
Also soweit schaut es ganz gut aus, denke ich.
Sagt mal kann man in Zeile 19 sich eigendlich das Ziel ausgeben lassen ohne eine Schleife und das erhöhen des Arrays?
#include <stdio.h> int main(void) { char string[] = "Erster Teststring\n"; char ziel[100]={}; int i = 0; while (string[i]!='\0') { printf("%c", string[i]); ziel[i]=string[i]; i++; } printf("war ich hier schon"); return 0; }
-
Wenn du nach der Schleife noch die '\0' kopierst, geht das bei
printf
mit %s
Oder mitputs
.Aber die arbeiten intern auch mit einer Schleife.
Du kannst eine rekursive Funktion machen
void puts_r(char *s) { if (*s) { putchar(*s); puts_r(s+1) } else { putchar('\n'); // weil puts das auch macht } }
-
mamamumu schrieb:
Sagt mal kann man in Zeile 19 sich eigendlich das Ziel ausgeben lassen ohne eine Schleife und das erhöhen des Arrays?
Wenn du am Ende ein Nullzeichen anhängst (was du wohl sowieso tun solltest), kannst du einfach printf mit %s benutzen.
Um das Nullzeichen anzuhängen, bietet sich eine Schleife an, die auch den Nullterminators des Originals mit kopiert. Da eine Zeichenkette immer mindestens aus einem Zeichen besteht (nämlich immer mindestens dem abschließenden Nullzeichen), brauchst du dir auch keine Sorgen bezüglich der Gültigkeit des ersten Zeichens zu machen.
-
Ok das mit der \0 was ich vergesen habe, habe ich nun gesehen
. Der Rest mit den Pointern so weit bin ich noch ned:) sorry
Eine Schleife die das \0 wieder anhängt, hm ja das wäre geschickt ich überlege mal was ich da nehmen kann.
Aber wäre das den so falsch, was ich nun gemacht habe?#include <stdio.h> int main(void) { char string[] = "Erster Teststring\n"; char ziel[100]={}; int i = 0; while (string[i]!='\0') { printf("%c", string[i]); ziel[i]=string[i]; i++; } i++; ziel[i]='\0'; puts(ziel); return 0; }
-
do while:)
Mensch 1000 Dank. Gewusst wie, aber erstmal drauf kommen.#include <stdio.h> int main(void) { char string[] = "Erster Teststring\n"; char ziel[100]={}; int i = 0; do { printf("%c", string[i]); ziel[i]=string[i]; i++; } while (string[i]!='\0'); puts(ziel); return 0; }
-
mamamumu schrieb:
#include <stdio.h> int main(void) { char string[] = "Erster Teststring\n"; char ziel[100]={}; int i = 0; while (string!='\0') { printf("%c", string[i]); ziel[i]=string[i]; i++; } i++; // das ++ ist zuviel ziel[i]='\0'; puts(ziel); return 0; }
*Und auch in dem Beispiel mit
do-while
wird die '\0' nicht kopiert.Initialisiere [i]ziel* mal mit einem (langen) Text, damit du das siehst.
char ziel[100]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
Ok das mit dem langen Text macht es sehr deutlich..och man..wohl zu früh gefreut..
Bis auf das i++ zu viel war es ja fast richtig. Aber wie soll ich das den in einer einzigen Schleife unter bekommen? Nun stehe ich etwas auf dem Schlauch, will mich wer weiter stupfen:)
#include <stdio.h> int main(void) { char string[] = "Erster Teststring\n"; char ziel[100]={"Erster Teststring und Fehlerhft"}; int i = 0; while (string[i]!='\0') { ziel[i]=string[i]; i++; } ziel[i]='\0'; puts(ziel); return 0; }
-
Trick: i++ liefert dir den Wert von i vor der Erhöhung als Rückgabewert. Das kann man dann auch in irgendwelchen Ausdrücken benutzen (zum Beispiel einer Schleifenbedingung
).
-
hm..ok, das ist nun vielleicht pfusch aber es klappt
war das auch dein Gedanke oder war der ausgefallener bzw. leichter
#include <stdio.h> int main(void) { char string[] = "Erster Teststring"; char ziel[100]={"Erster Teststring und Fehlerhaft"}; int i = 0; while (string[i]!='\0'+1) { ziel[i]=string[i]; i++; } // ziel[i]='\0'; puts(ziel); return 0; }
-
Die Lösung von 21.52h ist schon optimal.
Wenn Du alles in einer Schleife machen willst dann wohl mit
do-while
.
Aber warum?
-
mamamumu schrieb:
hm..ok, das ist nun vielleicht pfusch aber es klappt
Irgendwie habe ich meine Zweifel, dass das wirklich so klappt, wie du denkst. Deine Schleife stoppt bei der ersten 1. Aber die hat nichts mit dem Ende der Zeichenkette zu tun.