Speicherproblem bei Kopiervorgang in Array
-
Hallo!
Kann mir evtl jemand helfen, in meinem Code den Denkfehler zu suchen!?
Ziel des Spiels soll sein, den Imhalt des Arrays SCR an die Stelle POS im Array DEST zu kopieren und dabei die Stellen die überschrieben werden würden hinten wieder anzufügen.
Das Problem besteht nun darin, dass er mir beim ausführen eine "Memory-Violation" meldet, da er scheinbar mit einer meiner Schleifen über einen nicht reservierten Speicherbereich fährt.#include <stdio.h> #include <string.h> int main() { int pos=4,lscr=0,ldest=0,ldest2=0, i=0,j=0; char src[80]={'D','U'}; char dest[160]={'H','E','P','P','D','E','P','P'}; char temp[80]; lscr=strlen(&src[0]); ldest=strlen(&dest[0]); //Den String vor dem eingefuegt werden soll zwischenspeichern for(i=pos;i<=ldest;i++); { temp[j]=dest[i]; j++; } j=0; //Das Source-Array an der Stelle POS einfuegen for(i=pos+1;i<=lscr;i++) { dest[i]=src[j]; j++; } j=0; //Den gesicherten String anfuegen for(i=pos+lscr+1;i<=lscr+ldest+1;i++) { dest[i]=temp[j]; j++; } j=0; //Das Dest-Array ausgeben for(i=0;i<=ldest2;i++) printf(" %s",dest[i]); }
Zum Schluss soll er DEST ausgeben und man soll HEPPDUDEPP am Bildschirm lesen können. Wenn jemand eine einfachere Lösung kennt: Ich bin immer für Vorschläge offen!
Danke und ein schönes WE,
Madman
-
Ich verstehe zwar nicht, wieso du dir die Qual mit den einzelnen Feldern antust(Strings sind eh nur Felder mit einer Null am Schluss),
aber bittesehr:#include <stdio.h> #include <string.h> int main() { int pos=4; char src[80]={'D','U',0}; char dest[160]={'H','E','P','P','D','E','P','P',0}; char p_strDest[160]={0}; // Das Source-Array bis zur Stelle 4 einfuegen strncpy(p_strDest, dest, pos); //Den 2ten String anfuegen strcat(p_strDest, src); //Den Rest anfuegen strcat(p_strDest, dest+pos); //Das Dest-Array ausgeben printf("%s\n",p_strDest); }
-
Danke, aber das war nicht ganz das was ich brauche! Es wird verlangt, dass das Array SCR an die Stelle POS in DEST eingefügt wird. Du teilst es und schreibst es in ein neues Array.
Das war eine Aufgabe die uns gestellt wurde. Soll glaub ich ne Vorbereitung auf Listen sein.
-
for(i=0;i<=ldest2;i++) printf(" %s",dest[i]);
machst du zu
printf(" %s", dest);
oder
for(i = 0; i <= ldest2; i++) printf(" %c", dest[i]);
%c ist für einzelne Zeichen, %s ist für Strings
Bei der ersten Schleife nimm mal das Semikolon weg, sonst wird das nie was mit der Ausführung des Schleifeninhaltes
for(i = pos; i <= ldest; i++)
Deine zweite Schleife kann nicht so funktionieren, wie du es dir vorgestellt hast, da pos schon beim Schleifeneinstieg größer ist als lscr, kannst da ja mal i <= pos + lscr probieren.
-
... und so sieht es ohne String funktionen aus: Hat mich zwar die halbe Nacht gekostet, aber es funzt!
void main() } int i,j,k; int pos = 4; char string1[] = {"Heute Samstag"}; cahr string2[] = {" ist"}; char string3[160]; for(i=0; i<pos;i++) { string3[i] = string1[i]; } for(j=0,k=i;string2[j]!='\0';i++,j++) { string3[i] = string2[j]; } for(;string1[k]!='\0';i++,j++,k++) { string3[i] = string1[k]; } string3[i] = '\0'; }
lg klaus
-
Madman_y2k schrieb:
Das Problem besteht nun darin, dass er mir beim ausführen eine "Memory-Violation" meldet, da er scheinbar mit einer meiner Schleifen über einen nicht reservierten Speicherbereich fährt.
Das Problem dabei liegt hier
lscr=strlen(&src[0]); ldest=strlen(&dest[0]);
Alle String-Funktionen arbeiten mit nullterminierten Strings (C-Strings), die du aber nicht hast.
Ansonsten, hier meine Idee
#include <assert.h> int main(void) { const char src[] = " ist"; char dest[160] = {"Heute Samstag"}; size_t pos = 5; size_t src_len = strlen(src); size_t i = strlen(dest) + 1; assert(pos < i); while (i != pos) { --i; dest[i + src_len] = dest[i]; } i = 0; while (i != src_len) { dest[pos + i] = src[i]; ++i; } return 0; }