Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hab heut noch Tomaten auf den Augen:

char str="Test";

char zeichen='G';

strcpy(str,zeichen);

warum geht das net ?

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 );

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

@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.

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*) ?

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]

Vielen Dank :-)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.