Kurzanleitung "Zeichenketten in C"

Hallo zusammen,

ich habe es ja schon angedroht, dass ich eine kleine Anleitung zu den Zeichenketten in C schreiben werde.

Hier ist der 1. (unvollständige) Entwurf

Wir hatten uns ja schon unterhalten, dass wir Kurzanleitungen bereitstellen wollen.
Da noch nicht klar ist, wie das im Endeffekt geschehen soll, habe ich es erst mal auf meine Website gelegt.

Konstruktive Kritik, Fehlerhinweise, Wünsche usw. sind ausdrücklich erwünscht.

Ich möchte hiermit auch gleich eine Diskussion lostreten, wie wir solche Anleitungen veröffentlichen wollen.

Eine Möglichkeit wäre ein eigenständiger Thread, in dem nur die Anleitungen stehen und die Diskussionen dazu im normalen Bereich.

Da die Wahrscheinlichkeit von anderen Postings in diesem Sonderthread wohl gegen unendlich geht, wäre das evtl. viel Aufräumarbeit für unsere Mods, was ich denen aber auch nicht gern zumuten möchte.

Fragen über Fragen. Fangen wir einfach mal an.

Gruß Tommy

Hallo Tommy, die Peanut-Sammlung:

Die schließende Klammer fehlt: (Wir fangen beim Zählen der Position immer mit 0 an!

Anstelle "!!! könnt

Sreial.println

ergibt 10, also den Index des ersten 'o' (von 0 an zählen)

Was passiert aber (vereinfacht) dabei. Der String s1 existiert. Aus I1 wird ein neuer String erstellt und gemeinsam mit dem alten s1 in einen neuen S1 kopiert.

Erster Eindruck: Schön geschrieben, freue mich auf mehr!

Danke korrigiert.

Gruß Tommy

strncpy() wird gerne zur Längenbegrenzung verwendet, hat aber den Nachteil dass es nicht terminiert wenn die Arraygröße überschritten wurde. Die Funktion war auch niemals dafür gedacht mit null-terminierten Strings umzugehen, sondern zum Kopieren von Arrays mit konstanter Länge. Daher auch das seltsame Verhalten dass im Normalfall nicht nur ein NULL angehängt wird, sondern das ganze Array rechts mit NULL aufgefüllt wird.

strlcpy() terminiert sicher, ist aber nicht ISO C.

Hier muss ich nochmal rückfragen, damit ich es richtig beschreiben kann.

Welche Arraygröße ist gemeint? Quelle oder Ziel?
Was heißt nicht terminiert? Keine abschließende 0, unendlich weiter laufen oder noch was anderes?

Wie könnte man das Verhalten auf dem Arduino demonstrieren?

Gruß Tommy

Edit: Ich habe es gefunden. Das Problem tritt besonders dann auf, wenn genau die Zielarraylänge als n genommen wird.

Danke für den Hinweis, ich baue es ein.

Gruß Tommy

Das Problem tritt besonders dann auf, wenn genau die Zielarraylänge als n genommen wird.

Es tritt nur dann auf. Wird auch in der Doku explizit erwähnt. strncpy() war dazu gedacht auf einem UNIX System mit Strings fester Länge umzugehen. Genau für Verzeichnisnamen. Diese wurden dann mit NULL auf eine konstante Länge gebracht damit man sie schnell mit memcmp() vergleichen konnte. Wenn der String als so groß wie das Array war, war alles ok.

Tommy56:
...
Wir hatten uns ja schon unterhalten, dass wir Kurzanleitungen bereitstellen wollen.
...
Konstruktive Kritik, Fehlerhinweise, Wünsche usw. sind ausdrücklich erwünscht.
...

Diese Unterhaltung habe ich verpasst. Hast Du einen Link zu einem Thread?

Was Wünsche angeht: Wenn es eine „Von Usern für User“-Tippsammlung geben soll, wäre das auf jeden Fall etwas für einen „Sticky“-Thread. Ein weiterer Thread, der „klebrig“ sein sollte, ist IMO der „Zeigt her eure Projekte...“-Thread. Für Uwe wäre es vermutlich weniger Arbeit, wenn es für solche Sachen einen separaten Forums-Bereich gäbe, in dem Tipps+Tricks gesammelt werden können. Dort muss ja nicht jeder schreiben können.

Ansonsten versuche ich, mit meinen Weekendern Sachen zu machen oder zu zeigen, die Neulingen die ersten Schritte leichter machen.

Gruß

Gregor

Das war im Zuge der Diskussion rauher Ton im Forum

Gruß Tommy

Tommy56:
Das war im Zuge der Diskussion rauher Ton im Forum

Ach so. Danke!

Gruß

Gregor

Wie man die Sachen im Rahmen des Forums machen könnte, da sind vor allen die Moods gefragt, da die im Zweifel die Arbeit haben.

Da warte ich noch auf eine Meinungsäußerung.

Die Sachen auf der eigenen HP zu hosten ist erst mal ok, aber was ist, wenn der Hoster ausfällt (wir leben alle nicht ewig, Unfälle, ...). Dann ist eine Lücke im Forum. Deshalb sollten die Inhalte nach meiner Meinung letztendlich im Forum landen.
Eigene HP während der Entwicklung ist ok.

Gruß Tommy

F()- Macro und strcpy_P. strcat_P ergänzt.

Gruß Tommy

Jetzt ist auch der Teil mit PString drin.
Fehler bitte melden.

Gruß Tommy

hi,

für sowas wäre doch das hiesige wiki gemacht.

http://playground.arduino.cc/PmWiki/PmWiki

eine startseite, auf der dann alle anleitungen unseres forums mit guten titeln verlinkt sind.
das ding kann hoffentlich noch mehr, aber ohne mich damit zu beschäftigen, hab' ich einfach text reinkopiert, und es ist lesbar: Arduino Playground - Haustechnik-Eisebaer

es gibt auch eine deutsche beschreibung der grundfunktionen im netz. und eine englische im wiki selbst.

WICHTIG: bitte zum testen in der sandbox arbeiten, der admin liegt sonst bald in der fötusstellung unterm schreibtisch.

gruß stefan

Danke für die Info. Ich wußte nicht, dass da jeder rein schreiben kann.
Hast Du evtl. einen Link zur deutschen Beschreibung?

Gruß Tommy

hi,

klar: http://lmgtfy.com/?q=pmwiki+deutsch

gruß stefan :slight_smile: :slight_smile: :slight_smile:

EDIT: einen neuen artikel (sandbox!!!) legst Du übrigens an, indem Du eine seite aufrufst, die es noch nicht gibt, zb:

http://playground.arduino.cc/PmWiki/Zeichenketten-in-C

dann "edit". nach dem speichern (sandbox!!!) ist die seite dann aufrufbar. leerzeichen und unterstriche im titel mag das ding nicht, jedenfalls weiß ICH nicht, wie es geht...

OK, werde ich mir mal anschauen.

Gruß Tommy