gugelhupf Geschrieben 2. Oktober 2002 Geschrieben 2. Oktober 2002 Hab heut noch Tomaten auf den Augen: char str="Test"; char zeichen='G'; strcpy(str,zeichen); warum geht das net ? Zitieren
Klotzkopp Geschrieben 2. Oktober 2002 Geschrieben 2. Oktober 2002 Zunächst mal kannst Du einen char nicht mit einem Stringliteral initialisieren. Selbst wenn das ein Tippfehler war, und da "char* str" steht, darfst Du nichts anhängen, weil kein Speicher für das zusätzliche Zeichen geholt wurde. Zweitens musst Du zum Anhängen strcat verwenden. Allerdings akzeptiert strcat kein char als Argument. Und wenn Du die Adresse von zeichen angibst, hast Du ein dickes Problem, weil an der Speicherstelle danach mit sehr hoher Wahrscheinlichkeit kein Nullbyte steht. strcat fügt aber bis zum Stringendezeichen an. Das sollte es tun: char str[10]; strcpy( str, "Test" ); char zeichen[2]; zeichen[0] = 'G'; zeichen[1] = 0; strcat( str, zeichen ); Zitieren
Guybrush Threepwood Geschrieben 2. Oktober 2002 Geschrieben 2. Oktober 2002 @Klotzkopp müßte man an das Zeichen nicht ein '\0' anhängen anstatt das nachfolgende auf 0 zu setzen? :confused: Gruß wasweißich Zitieren
gugelhupf Geschrieben 2. Oktober 2002 Autor Geschrieben 2. Oktober 2002 Leider ist es nicht so einfach :-( inline char* permutiere(char* Fest,char* Eingabe) { char NeuFest[100]; char NeuEingabe[100]; unsigned int counter; unsigned int len=strlen(Eingabe); if (len==0) cout << Fest; else { for (counter=0;counter<len;counter++) { strcpy(NeuFest,Fest); // es soll sein: NeuFest=Fest+Zeichen !!?? strcat(NeuFest,Eingabe[counter]); // hier soll dann sein: NeuEingabe=Eingabe ohne Zeichen !! } } return permutiere(NeuFest,NeuEingabe); } [/PHP] Also es soll in der Schleife der Wert von Fest nach NeuFest kopiert werden. Dann soll an NeuFest das Literal angehängt werden das mit Eingabe[counter] bezeichnet ist. Z.b.: Fest="1" Eingabe[0]="a"; NeuFest=Fest+Eingabe[0] Thats the prob Zitieren
Klotzkopp Geschrieben 2. Oktober 2002 Geschrieben 2. Oktober 2002 @wasweißich: Das ist ein und dasselbe, es gibt nicht wirklich einen Unterschied zwischen '\0' und (char)0. @gugelhupf: ... unsigned int len=strlen(Eingabe); [COLOR=red]char szTemp[2]; szTemp[1] = 0;[/COLOR] if (len==0) cout << Fest; else { for (counter=0;counter<len;counter++) { [COLOR=red]szTemp[0] = Eingabe[counter];[/COLOR] strcpy(NeuFest,Fest); // es soll sein: NeuFest=Fest+Zeichen !!?? strcat(NeuFest,[COLOR=red]szTemp[/COLOR]); ... [/CODE] Mir ist allerdings nicht klar, was Du mit "NeuEingabe=Eingabe ohne Zeichen" meinst. Soll das Zeichen herausgeschnitten werden? Oder soll alles bis zu diesem Zeichen abgeschnitten werden? Nachtrag: Da das eine rekursive Funktion ist, solltest Du die Arrays besser auf dem Heap anlegen. Zitieren
gugelhupf Geschrieben 2. Oktober 2002 Autor Geschrieben 2. Oktober 2002 Original geschrieben von Klotzkopp Mir ist allerdings nicht klar, was Du mit "NeuEingabe=Eingabe ohne Zeichen" meinst. Soll das Zeichen herausgeschnitten werden? Oder soll alles bis zu diesem Zeichen abgeschnitten werden? Nachtrag: Da das eine rekursive Funktion ist, solltest Du die Arrays besser auf dem Heap anlegen. Heapgeschichten und ähnliches mach ich später...ich ärgere mich nur mit diesen ***** Stringfunktionen herum. Du hast recht. NeuEingabe=Eingabe ohne Zeichen soll ein String sein der eben das laufende Literal NICHT enthält, ansonsten identisch ist mit Eingabe. Beispiel: Eingabe="abcd" 1.Durchlauf: NeuEingabe="bcd" 2.Durchluaf: NeuEingabe="acd" 3.Durchluaf: NeuEingabe="abd" 3.Durchluaf: NeuEingabe="abc" Wie lösch ich das raus (natürlich am besten mit der laufvariable der schleife *g*) ? Zitieren
Klotzkopp Geschrieben 2. Oktober 2002 Geschrieben 2. Oktober 2002 Original geschrieben von gugelhupf Wie lösch ich das raus (natürlich am besten mit der laufvariable der schleife *g*) ? if( counter > 0 ) { strncpy( NeuEingabe, Eingabe, counter ); } NeuEingabe[counter] = '\0'; strcat( NeuEingabe, Eingabe + counter + 1 ); [/CODE] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.