PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CStrings----Verzweiflung



tuxipuxi
04-10-2002, 14:04
hi,

ich soll hier eine aufgabe loesen,und zwar soll ich ne funktion strcpy schreiben die einen cstring in einen anderne kopiert.
mein quelltext:
"
#include <iostream>
#include <string>

using namespace std;

void strcpy(char* p,char* q)
{
while(*p++ = *q++);
};

int main(int argc,char** argv)
{
char* p;
char* q;
cout<<" String eingeben : \n";
cin>>p;
cout<<" String : "<<p<<"\n";
strcpy(p,q);
cout<<" Kopierter String: "<<q;
};
"

tja,wenn ich als string hallo eingebe kommt die ausgabe:
"
String : hallo
String zwei : Zy$a
"
also nur quatsch fuer string zwei.

habt ihr ne ahnung warum und wie ichs loese?

ciao lane

anda_skoa
04-10-2002, 14:29
Du solltest nicht CString schreiben, denn CString heitß die Stringklasse der MFC.
Das ist schließlich was anderes.

Dein Problem ist, dass du weder für p noch für q Platz im Speicher hast.
Du hast nur die beiden Poinetr deklariert, die auf so einen Platz zeigen können.

Probier es so


char p[100];
char q[100];


#include <string> brauchst du nicht, du benutzt ja keine strings.

Ciao,
_

tuxipuxi
04-10-2002, 14:35
danke,jetzt funzts
(war noch n anderer fehler drin...in strcpy muss man q und p vertauschen)

anda_skoa
04-10-2002, 15:24
Hängt davon ab, welcher Parameter destination und welcher source ist.
So wie du es hier gepostet hast, war die Reihenfolg schon richtig.

Pittbull hatte eine andere Reihenfolge.
(die von strcpy aus string.h)

Ciao,
_

tuxipuxi
04-10-2002, 15:51
da hab ich noch ne frage:
jetzt ist die aufgabe:
cat funktion schreiben,die zwei cstrings(so nennt sie stroutrup) konkateniert und zurueckgibt.
meine idee war so:

char cat(char* p,char* q)
{
char x = new char[strlen(p)+strlen(q)];
for(int i=0;i<strlen(p);i++)
{
p[i]=x[i];
};
for(int j=0;j<strlen(q);j++)
{
q[j]=x[strlen(p)+j];
};
return x;
};

geht aber net :(

anda_skoa
04-10-2002, 17:36
Original geschrieben von lane
da hab ich noch ne frage:
jetzt ist die aufgabe:
cat funktion schreiben,die zwei cstrings(so nennt sie stroutrup) konkateniert und zurueckgibt.


Ja, cstrings ist ok, aber CString ist die Klasse aus MFC.



char cat(char* p,char* q)
{
char x = new char[strlen(p)+strlen(q)];


char* cat
und
char* x



for(int i=0;i<strlen(p);i++)
{
p[i]=x[i];


andere Richtung
x bekommt den Wert von p
x[i] = p[i]



q[j]=x[strlen(p)+j];


siehe oben

Außerdem brauchst du noch ein
\0 am Ende, das schließ in C den String ab.
Darum mußt du den resultat string auch um 1 größer machen als dei Summe der Längen.

Besser aber, du hälts dich auch hier an die Sematik der strcat Funktion aus <cstring>



void strcat(char* dest, char* source)
{
int i;
int pos = strlen(dest);
for (i = 0; i <= strlen(source); ++i)
dest[pos+i] = source[i];
}


Durch das <= übernimmt man das \0 aus source, weil strlen die Anzahl der "echten" Zeichen zählt.

Ciao,
_

The Ripper
05-10-2002, 14:12
bei dir steht die variable, der du einen wert zuweisen willst irgendwie oft rechts vom =-zeichen, richtig wäre aber folgendes:
variable = wert
(also genau andersrum, z.B. p[i]=x[i]; -> x[i]=p[i];, du willst ja den inhalt von p in x kopieren)