Verfasst: 19.04.2009 23:51
> wobei ich die von and51, so nicht nutzen wuerde, da sie viel zu unsicher ist
Wieso das denn?
Selbst, wenn ein leerer String übergeben wird, dann zeigt der Anfangspointer auf das Nullbyte, der Endpointer auf eine ungültige Adresse vor dem Anfangspointer (da ja pauschal 1 bzw. 2 Byte abgezogen werden).
Die Schleife wird aber in dem Falle nie ausgeführt, da sie immer dann abbricht, wenn der Endpointer vor den Anfangspointer wandert. Somit findet nie eine 'ungültige' Schreiboperation statt.
Solltest du eine andere Unsicherheit meinen, die ich hier nicht erkennen kann, erklär es mir mal bitte.
> man massiv Stringoperationen durchführen muss mit den Pointern besser gestellt ist
Natürlich steht man bei Stringoperationen mit Pointern (fast) immer besser da, weil man die Strings so direkt im Speicher manipulieren kann. Dabei kann man auch gut Strukturen (Structure, StructureUnion) einsetzen. Eine Stufe langsamer ist das Peeken und Poken z. B. mit PeekC() und PokeC() und ganz unten befinden sich die Stringfunktionen (FindString(), Trim(), Left(), RSet(), ...):
Stringfunktionen » Peek & Poke » Pointer
Ein allgemeines Wort zum Pointern
Dennoch ist ein wenig Vorsicht beim 'Pointern' angebracht, denn es schleichen sich auch bei 'geübten' Programmieren gern mal Logikfehler ein, die selten zu bestimmten Fehlern oder aber auch zu "Memoryleaks" (Speicherlecks) führen können. Das meint edel mit "unsicher". Auch ich habe diese Prozedur zwar geschrieben, aber nur selten genutzt; ich könnte also gewisse Sicherheitsaspekte übersehen haben, die beim wenigen Testen nicht auffielen. Diese Probleme haben die nativen Funktionen wie FindString(), Mid() oder StringField() nicht. Nicht, weil Fred sie programmiert hat, sondern weil sie schon tausend- oder millionenfach benutzt wurden. Fehler würden sehr viel schneller auffallen, gepostet und behoben werden.
Bei dieser ReverseString()-Funktion brauchst du dir allerdings keine Sorgen machen, denn die ist überschaubar und gut diskutabel. Selbst wenn ein Fehler drin wäre, wäre er nicht so gravierend, als das er gleich deinen Computer zerstören würde; die schlimmste Konsequenz wäre allenfalls ein Programmabsturz.
So viel zum Thema Pointern, dazu kann ich jeden nur ermutigen.
Wieso das denn?
Selbst, wenn ein leerer String übergeben wird, dann zeigt der Anfangspointer auf das Nullbyte, der Endpointer auf eine ungültige Adresse vor dem Anfangspointer (da ja pauschal 1 bzw. 2 Byte abgezogen werden).
Die Schleife wird aber in dem Falle nie ausgeführt, da sie immer dann abbricht, wenn der Endpointer vor den Anfangspointer wandert. Somit findet nie eine 'ungültige' Schreiboperation statt.
Solltest du eine andere Unsicherheit meinen, die ich hier nicht erkennen kann, erklär es mir mal bitte.
> man massiv Stringoperationen durchführen muss mit den Pointern besser gestellt ist
Natürlich steht man bei Stringoperationen mit Pointern (fast) immer besser da, weil man die Strings so direkt im Speicher manipulieren kann. Dabei kann man auch gut Strukturen (Structure, StructureUnion) einsetzen. Eine Stufe langsamer ist das Peeken und Poken z. B. mit PeekC() und PokeC() und ganz unten befinden sich die Stringfunktionen (FindString(), Trim(), Left(), RSet(), ...):
Stringfunktionen » Peek & Poke » Pointer
Ein allgemeines Wort zum Pointern
Dennoch ist ein wenig Vorsicht beim 'Pointern' angebracht, denn es schleichen sich auch bei 'geübten' Programmieren gern mal Logikfehler ein, die selten zu bestimmten Fehlern oder aber auch zu "Memoryleaks" (Speicherlecks) führen können. Das meint edel mit "unsicher". Auch ich habe diese Prozedur zwar geschrieben, aber nur selten genutzt; ich könnte also gewisse Sicherheitsaspekte übersehen haben, die beim wenigen Testen nicht auffielen. Diese Probleme haben die nativen Funktionen wie FindString(), Mid() oder StringField() nicht. Nicht, weil Fred sie programmiert hat, sondern weil sie schon tausend- oder millionenfach benutzt wurden. Fehler würden sehr viel schneller auffallen, gepostet und behoben werden.
Bei dieser ReverseString()-Funktion brauchst du dir allerdings keine Sorgen machen, denn die ist überschaubar und gut diskutabel. Selbst wenn ein Fehler drin wäre, wäre er nicht so gravierend, als das er gleich deinen Computer zerstören würde; die schlimmste Konsequenz wäre allenfalls ein Programmabsturz.
So viel zum Thema Pointern, dazu kann ich jeden nur ermutigen.