Die Funktion strstr(...) sucht einen Substring im String. Beide Strings befinden sich im RAM des Controllers. Bei der Funktion strstr_P(...) befindet sich der String im RAM und der Substring im Flash. Wie kann man einen String im Flash mit einem Substring im RAM durchsuchen? http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html
Bernd schrieb: > Wie kann man einen String im Flash mit einem Substring im RAM > durchsuchen? Du kopierst den String vom Flash ins RAM und rufst strstr() auf. Oder ist der zu lang fürs RAM? Alternative: Selber schreiben.
Als allgemeinen Hinweis möchte ich anführen, dass das "fehlen" einer Funktion in einer Standardbibliothek meist, aber nicht grundsätzlich, darauf hindeutet, dass diese Funktion nicht oder sehr selten gebraucht wird. Daraus folgt, dass es sich oft lohnt, darüber nachzudenken, ob man das Problem nicht neu formulieren kann, so dass man mit den vorhandenen Funktionen auskommt. Falls das aus irgendeinem Grund nicht geht, kann man die Funktion selbst schreiben. Falls Du es für angebracht hältst, kannst Du uns ja mal beschreiben, was Du erreichen willst. Vielleicht können wir bei der Neuformulierung des Problems helfen.
Bernd schrieb: > Wie kann man einen String im Flash mit einem Substring im RAM > durchsuchen? Mächtig viel Sinn macht das ganze nicht. strstr_P Funktion gibt es vor allem weil davon ausgegangen wird dass der gesuchte String (needle) konstant ist und direkt im Quelltext angegeben wird. Damit dieser dann nicht Platz im RAM verschwendet kann man ihn auch nur im Flash anlegen lassen und nutzt dann strstr_P. Wenn nun aber dein "haystack" im Flash liegt, ist er konstant. Du kennst ihn. Warum darin rumsuchen? Es ergibt keinen Sinn!
Cyblord -. schrieb: > Wenn nun aber dein "haystack" im Flash liegt, ist er konstant. Du kennst > ihn. Warum darin rumsuchen? Es ergibt keinen Sinn! Jein. Sieht nur auf den ersten Blick so aus. Stell' dir beispielsweise einen Parser vor, der überprüft, ob und wenn ja welches Token (z.B. bei ein Kommando) vorliegt. Da wirst Du durchaus durch eine (konstante) Stringliste spazieren und Vergleiche durchführen.
Markus F. schrieb: > Da wirst Du durchaus durch eine (konstante) Stringliste spazieren und > Vergleiche durchführen. Das würde bedeuten, daß die Tokens alle mehr oder weniger aneinandergeklatscht in einem String liegen. Kann man zwar machen, aber was wäre damit gewonnen? Eine Stringliste besteht nach meinem Verständnis aus separaten Strings, und dann muss man nicht mit strstr darin suchen.
Rufus Τ. F. schrieb: > Markus F. schrieb: >> Da wirst Du durchaus durch eine (konstante) Stringliste spazieren und >> Vergleiche durchführen. > > Das würde bedeuten, daß die Tokens alle mehr oder weniger > aneinandergeklatscht in einem String liegen. Kann man zwar machen, > aber was wäre damit gewonnen? Eine Stringliste besteht nach meinem > Verständnis aus separaten Strings, und dann muss man nicht mit > strstr darin suchen. Eben. Wenn man das braucht dann hat man in 99% der Fälle eine deutlich bessere Lösung übersehen.
Rufus Τ. F. schrieb: > Eine Stringliste besteht nach meinem > Verständnis aus separaten Strings, und dann muss man nicht mit > strstr darin suchen. Auch dafür gibt es sinnvolle Beispiele. Stell dir z.B. vor, der User soll hier die Möglichkeit haben, ein Subforum per Texteingabe auswählen zu können. Er kann dann also "Funk" eingeben, um in "HF, Funk & Felder" zu landen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.