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 ?
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 );
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
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
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.
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*) ?
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]
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden