"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Was stimmt da nicht?(C++ Programm)

radio 06.10.2002 - 14:21 940 15
Posts

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
Ich hab da ein pointer Problem.... ich weis nicht wie ich die ansteurern kann... komm net auf problem....

wo ist hier der Fehler?
ich defenier den speicherplatz mit new...
dann geh ich auf anfang von speicherfeld mit Text=0
und dann schreib ich auf die adresse mit *Text='A'
und geh dann in den nächsten Speicherblock mit Text++;
und fang in der schleife wieder oben an....
wenn das fertig ist schau ich mir an was raus kommt...
das geht bei mir aber irgnedwie nicht
need help(büdde :-) )


#include <iostream.h>

void main(){

char* Text;
int Z;

cin>>Z;

Text=new(char[Z]);

for(int i=0;i++;i<=Z)
{
*Text='A';
Text++;
}

Text=0;

for(int i=0;i++;i<=Z)
{

cout<< *Text;
Text++;

}
getche();

}:rolleyes:

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Also du hast auf jeden Fall beide Male einen Schleifendurchlauf zu viel.

EDIT: Und du darfst Text nicht einfach auf 0 setzen, sondern auf die ursprüngliche Adresse, die du von new gekriegt hast. Musst dir halt irgendwie merken oder Text gar nicht verändern und mit [] drauf zugreifen.

EDIT2: Einen null-terminierten String (mit '\0' am Ende) kannst du auch als ganzes mit cout ausgeben, da muss du nicht jedes Zeichen einzeln machen.
Bearbeitet von Ringding am 06.10.2002, 14:25

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
mit den [i] kann man doch nicht zugreifen(wie auf ein Feld)

text=&4 soll ja auf 4. speicherplatz zugreifen.... geht aber irgendwie nicht weil er nicht int auf char machen will....

cya

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
1. doch, kann man

Text[0] .. Text[Z-1]

Du kannst Text nicht einfach auf eine absolute Adresse setzen.

Du könntest aber z.B. das machen:

char *Text2 = Text;

oder = Text+4

oder wie auch immer. Dann kannst du mit Text2 arbeiten und Text unangetastet lassen.

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
ok verstehe Text=0; heißt das ich auf die 1. physikalische adresse vom arbeitsspeicher zugreife...

es geht aber immer noch net...

cya

aber ich kann eh schreiben Text[0]=1;

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
kannst du schon, ob es das ist, was du willst, ist allerdings eine andere frage. es schreibt das ascii zeichen mit dem code 1 auf den ersten platz von Text. vielleicht eher Text[0]='1';

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
hey ich glaub ich weis wo der fehler ist
danke!

cya

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
geht imme rnoch nicht :-(

also noch mal

#include <iostream.h>

void main(){

char* Text;
int Z;



cin>>Z;
Z++;
Text=new(char[Z]);



for(int i=0; i<Z;i++)
{Text[i]='8';
}
Text[Z]='\0';

cout<<Text; //jetzt müssten Z 8er ausgespuckt werden...
getche();
}

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10331
sorry falls ich falsch liege.. aba bist sicher das cout<<Text die ganze variable ausgeben kann?

würds eher mit printf("%s",Text); probieren..

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Gib mal die Klammern beim new weg.

Und du musst ein Byte mehr allozieren, weil du ja das \0 auch noch dazu hast.

EDIT: Ah, du hast das Z schon vorher hochgezählt. Dann machst du aber immer noch Z+1 Schleifendurchläufe. Stört zwar nicht wirklich, weil der letzte 8er nachher einfach durch \0 überschrieben wird, aber man sollte sich solche Schlampereien nicht angewöhnen.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von XeroXs
sorry falls ich falsch liege.. aba bist sicher das cout<<Text die ganze variable ausgeben kann?

Ja.

So wie du es schreibst, würde man es in C machen.

In C++ sollte man eher alles mit cout machen, wobei printf aber trotzdem noch funktioniert.

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10331
hm... lol... uns wurde in der schule eingetrichtert das mann cout nicht benutzen sollte... aus verschiedenen gründen (ja ich rede von c++)

btw.: wrong forum ;)

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
thx prob ist gelöst....
schuld war die dumme klammer....
ach und cout<<Text; funktioniert bestens.....

danke!
und ich werd demächst beinen info lehrer eine schmieren, weil er mir falschen source auf tafel schreibt :D

cya

radio

Banned by Moderators
Avatar
Registered: Nov 2000
Location: Wien
Posts: 1556
noch kleine frage nebenbei:

wie "unterstreiche" ich teilweise einen text bei dosfenster(hab ihn selbst ausgegeben)

cya

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
wie soll das gehen? mit hercules und mda hat man das iirc können, aber das ist lang her ... :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz