Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Speicherleck

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
17.10.2003, 18:25 Uhr
Anfänger00



Ich glaube auch zu wissen ,warum das so sein muss:
Gehen wir mal davon aus,das die Schleife gerade das letzte gültige Zeichen überprüft z.B 'A' an Position 20.Sie stellt fest,das es gültig ist und erhöht dann
die variable x auf 21.Das entspricht jedoch schon '\0'.
Also muss ich 1 abziehen um die tatsächliche Größe des Strings zu erhalten.
So denke ich darüber,wie ihr darüber denkt könnt ihr mir ja posten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
17.10.2003, 19:53 Uhr
Pablo
Supertux
(Operator)


String ="Das ist ein String"
string als Array:

Code:
{'D', 'a' , 's', ' ', 'i', 's', 't', ' ', 'e', 'i', 'n', ' ',    'S', 't', 'r', 'i', 'n', 'g', '\0'}
Wert von x nach x++
  1    2    3    4    5    6    7     8     9     10   11   12   13  14   15  16   17   18   19
Stelle am Array (und Wert von x vor x++)
  0   1      2   3  4   5  6   7   8    9   10 11  12  13 14 15 16 17 18


(leider klaptt es nicht so ganz )

C++:
while(buffer[x] != '\0')x++;


"Solange buffer[x] keine \0 ist, wird x um 1 erhöht. Wenn string[x] = 'g', d.h x==17 sind wir am Ende des Strings, aber das wissen wir noch nicht. Da string[17] != '\0' ist, dann wird x++ ausgeführt, also ist x==18. Nun wird die while Schleife nochmla die Bedingung überprüfen. Diesesmal ergibt buffer[x] == '\0', weil x==18, x++ wird nicht mehr ausgeführt. 18 ist genau die Länge der Zeichenkette. Siehst du? Wir brauchen nicht nicht x um 1 zu erniedrigen, weil x schon die Länge der Zeichenkette hat, also, \0 ist das 19 Zeichen an der Stelle 18, und da die Arrays bei 0 anfangen, ist 18 die Länge bis zum \0.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 17.10.2003 um 19:56 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
17.10.2003, 20:03 Uhr
Anfänger00



Ok,aber wenn ich mich jetzt nicht irre brauche ich bei diesem Programm den Wert des Strings -1,sonst kommt da halt was falsches raus..weil ich ja den maximalen array-Wert brauche und der ist nun mal n-1,da wie du ja gesagt hast das rray mit 0 beginnt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
17.10.2003, 20:08 Uhr
Pablo
Supertux
(Operator)


Wenn di die gesamte Zeichenkette permutieren willst, musst du die richtige Länge kennen. Sonst, wie kannst du denn auf das letzte druckbare Zeichen verschieden von \0 zugreifen?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 17.10.2003 um 20:09 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
17.10.2003, 21:05 Uhr
Anfänger00




Zitat:
Pablo Yanez Trujillo postete

(leider klaptt es nicht so ganz )


Was klappt nicht?
Ich blick bei deiner Erklärung nicht ganz ducrh aber,wenn man das -1 weglässt stimmt das mit der Länge schon.
Also ich werd nochmal drüber nachdenken und ein wenig experimentieren.

Dieser Post wurde am 17.10.2003 um 21:06 Uhr von Anfänger00 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
17.10.2003, 21:12 Uhr
Pablo
Supertux
(Operator)


Leider klappt das nicht, ich meine mit der Übereinstimmung von den Zeichen und den Zahlen. So kann man besser verstehen. Was verstehst du denn nicht?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
17.10.2003, 21:41 Uhr
Pablo
Supertux
(Operator)


also, guck mal das, gleiche Zeichenkette:

Code:
string[x]=string[0] = 'D'; x vor x++ = 0; x nach x++ = 1
string[x]=string[1] = 'a'; x vor x++ = 1; x nach x++ = 2
string[x]=string[2] = 's'; x vor x++ = 2; x nach x++ = 3
string[x]=string[3] = ' '; x vor x++ = 3; x nach x++ = 4
string[x]=string[4] = 'i'; x vor x++ = 4; x nach x++ = 5
string[x]=string[5] = 's'; x vor x++ = 5; x nach x++ = 6
string[x]=string[6] = 't'; x vor x++ = 6; x nach x++ = 7
string[x]=string[7] = ' '; x vor x++ = 7; x nach x++ = 8
string[x]=string[8] = 'e'; x vor x++ = 8; x nach x++ = 9
string[x]=string[9] = 'i'; x vor x++ = 9; x nach x++ = 10
string[x]=string[10] = 'n'; x vor x++ = 10; x nach x++ = 11
string[x]=string[11] = ' '; x vor x++ = 11; x nach x++ = 12
string[x]=string[12] = 'S'; x vor x++ = 12; x nach x++ = 13
string[x]=string[13] = 't'; x vor x++ = 13; x nach x++ = 14
string[x]=string[14] = 'r'; x vor x++ = 14; x nach x++ = 15
string[x]=string[15] = 'i'; x vor x++ = 15; x nach x++ = 16
string[x]=string[16] = 'n'; x vor x++ = 16; x nach x++ = 17
string[x]=string[17] = 'g'; x vor x++ = 17; x nach x++ = 18
string[x]=string[18] = '\0'; x vor x++ = 18; x++ wird nicht mehr ausgefürt



Siehst du???? x nach x++ sagt, wie lang die Zechenkette ist, an der Stelle x-1 (wenn x++ ausgeführt wurde), und x-1 weil das Arrray bei 0 zu zählen anfängt, wie aber bei 1. So, hast du es?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 17.10.2003 um 21:44 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
18.10.2003, 13:20 Uhr
Anfänger00



ok,du hast Rechtaber ich habe schon alles so angepast,dass es mit dem Wert von Wort-1 funzt. Das funktioniert jetzt auch alles ohne Speichermüll.
Also Danke für eure Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: