.| Autor | Beitrag |
|---|---|
|
000 26.10.2002, 09:24 voidi |
hi.
so das programm hab ich jetzt grade mal frei aus meinem gehirn abgetippt, da ich nicht an dem computer sitze wo ich programmiere. ich compile also das ganze mit dem borland 5.5 c++ compiler und bekomme dann so ca. 5 fehlermeldungen,die mir irgend was komisches sagen mit "can not convert char to char *" oder so. p.s. ich blicke in meinem buch nicht richtig durch und irgendwelche tuts haben mir bisher auch nucht geholfen. ich hoffe ihr könnt mir irgendwie helfen. --<Teranite> ich hab nen arschmaessigen traffic |
|
Profil || Suche |
|
001 26.10.2002, 11:32 Mazze |
Ja. Du könntest jetzt ein char* zurückgeben, aber das macht man normal eh anders: So wird jetzt name direkt verändert, da ein Zeiger auf das Array übergeben wird. Ich weiß allerdings nicht wie weit du schon mit C/C++ bist und ob du schon weißt was das genau bedeutet. cu BattleTech-MOD: |
|
Profil || Suche |
|
002 26.10.2002, 12:09 Tron |
bei den standardheadern nicht mehr die .h version einbinden, das ist 'deprecated' (misbilligt) und wird irgendwann aus der sprache gestrichen, statt dessen:
des weiteren schreibst du auch nicht in die strings sondern schreibst nur die adresse in die variable str, da aber str selbst eine wertuebergabe ist, wird in main nichts von dieser aenderung ankommen.
ich denke mal, einige fehler, kamen durchs abtippen.
bis man das thema zeiger ganz begriffen hat, dauert es ne weile...
wie heisst denn das buch? -- 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
003 26.10.2002, 13:30 voidi |
ich hatte die funktion getche() noch in meinem programm,deswegen die conio das buch heisst c++ entpackt von herbert schildt das ist eigentlich sehr gut und äußerst umfangreich aber nicht umbedingt ein einsteigerbuch, da es in einer sehr "hohen sprache" (imho) geschrieben ist. @mazze ich bin noch so ziemlich am anfang, aber deine erläuterung war verständlich, danke ein paar fragen bleiben mir allerdings noch, ist das nun ein zeiger? "char*" char ist ja ein datentyp und wann wird char nun als zeiger benutzt und wann nicht? <Teranite> ich hab nen arschmaessigen traffic Dieser Beitrag wurde am 26.10.2002 um 13:38 von voidi bearbeitet. |
|
Profil || Suche |
|
004 26.10.2002, 22:27 Kriz |
char* ist ein "Zeiger auf char". In C/C++ werden so Strings bezeichnet. Wenn man also schreibt: char* s = "Hello world"; dann interpretiert der Compiler s erstmal so: Hello world\0 Das abschließende Nullzeichen \0 ist das physische Ende des Strings, wird aber weder ausgegeben noch in einer Stringlängenberechnung verwendet. s zeigt als Zeiger auf den Speicherplatz des ersten Zeichens, hier 'H'. Wenn der String ausgegeben wird, dann geht das Programm ab der Adresse von 'H' solange je 1 Byte weiter (1 Byte = 1 Adresse pro Zeichen), bis das abschließende Nullzeichen erreicht wird. Dann ist die Ausgabe des Strings beendet. --K:R-I)Z++ |
|
Profil || Suche |
|
005 28.10.2002, 15:54 CorDharel |
Muss Greetz CorDharel Leader der HolyShitBastards Dieser Beitrag wurde am 28.10.2002 um 15:59 von CorDharel bearbeitet. |
|
Profil || Suche |
|
006 28.10.2002, 17:45 Kriz |
Nicht unbedingt. Es kommt darauf an, inwiefern man "str" weiter benutzen will. Wenn "str" nun ein Zeiger auf char ist (char*), also ein String, dann ist die Zuweisung eines Stringliterals zulässig: Du siehst, mit char* ist man variabel bei der Sache, weil im Prinzip nur mit Zeigerarithmetik gespielt wird. Die Funktion strcpy() ist auch hier möglich, macht aber im Prinzip nur das, was die Laufzeitumgebung intern auch macht (Überschreiben des Zielstrings). Anders sieht die Sache mit einem Array von chars aus (char[]). Das ist zwar auch eine Art String, aber im weitesten Sinne eher doch ein Array von Zeichen. Da ein char-Array statisch ist (dynamische char-Arrays sind wiederum Zeiger auf char und daher vom Typ char* -> siehe oben), bekommt es einen festen Speicherbereich zugewiesen, der exakt n Elemente lang ist. Einem char-Array kann man auf zwei Arten ein Stringliteral zuweisen. Die erste Variante ist die Indexeinfügung, die zweite die Zeigerzuweisung. Die Indexeinfügung sieht so aus: temp zeigt auf das erste Feld von str und quelle auf das erste Zeichen seines Stringliterals. Nun wird das erste Zeichen von quelle nach temp kopiert. Danach werden die zeiger str und quelle inkrementiert. Zeigerinkremetierung bedeutet, daß ein Adressensprung von je 1 Byte durchgeführt wird (1 Byte ist die Speicherplatzmenge eines Zeichens). Nun zeigen also temp auf das zweite Feld und quelle auf das zweite Zeichen. Der Ergebnisausdruck der while()-Schleife ist solange "true", solange temp kein Nullzeichen empfängt. Das bedeutet, daß solange Zeichen für zeichen von quelle nach temp kopiert wird, bis temp das abschließende Nullzeichen vom quelle-Stringliteral erhalten hat. Dann bricht die Schleife ab und der Inhalt von quelle ist vollständig nach temp (bzw. str) kopiert worden. Das ist exakt die Arbeitsweise von strcpy()... --K:R-I)Z++ |
|
Profil || Suche |
|
007 29.10.2002, 09:43 Hessie J. |
Bidde? Gibt es echt eine 'Laufzeitumgebung', die so was macht? Alle im Programm vorkommenden Stringliterale stehen doch irgendwo mehr oder weniger hintereinander (schreibgeschützt) im Speicher. z.B. so Dieser Beitrag wurde am 29.10.2002 um 09:44 von Hessie J. bearbeitet. |
|
Profil || Suche |
|
008 29.10.2002, 14:13 Tron |
kriz, was du in #006 geschrieben hast ist groestensteils falsch, Hessie hat es korrekt dargelegt. --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |

