...Außerdem wird einem hier ernsthaft geholfen, und sei es sogar wenn man das vergessene Semikolon einfach nicht findet. Im erwähten Forum kommt man sich immer vor wie ein Fortuna D'dorf-Fan beim FC Köln...

Ich hatte da noch keine so schlimmen Erfahrungen
Man muss halt netter fragen, dort bedarf es keiner Anmeldung und jeder Depp stellt dort eine Frage à la "Ich bin zu faul für irgendwas, man möge mir bitte den Ar*** abwischen". Da wird man halt irgendwann ungehalten
Genau das habe ich ja vor, eventuell nicht so elegant wie ihr, dazu fehlt mir das Know how, aber immerhin kenne ich die stellen, wo und wann ich an die Informationen aus dem String ran muss. Deshalb war die Idee, ich lese aus dem String Array die "wichtigen" Stellen aus und übergebe Sie meiner Funktion rev_string(), diese setzt die Zeichen um, damit ich zumindest einmal die Telefonnummern und auch das Datum etc. raus bekomme, danach habe ich die eigentliche Textnachricht zu decodieren, dazu benötige ich erst einmal noch ein wenig Gehirnschmalz - aber das wird auch schon gehen. <<-- Genau aus diesem Grund benötige ich das Wissen um ein Return Array.
Eine "standard" Lösung ist folgende:
Code: Alles auswählen
void doSomething(const char * baseString, char * result1)
Du bekommst einmal einen Pointer auf den zu verarbeitenden String und dann noch Pointer auf die Ergebnis-Arrays, damit übergibst du die Verantwortung den Speicher zu reservieren an denjenigen, der die Funktion aufruft.
Ein möglicher Aufruf sieht so aus:
Code: Alles auswählen
char text[80]; //Ein wenig Speicher reservieren
char result[80]; //Noch ein wenig speicher reservieren
getText(text);
doSomething(text, result);
Nun muss man aber einiges beachten. Die Funktion "doSomething" erhält Pointer, aus Sicht dieser Funktion weiß man nicht, ob das ein NULL-Pointer ist, ob da für 2 chars Speicher reserviert wurde oder für 10000.
Es gibt da Lösungen für, die sind aber gut genug im Wiki dokumentiert zum Thema Pointer und Speichermanagement.
Zudem musst du in der Funktion die Information haben, wie lang der String ist. Der "normale" Ansatz ist nach dem 0-Byte zu suchen, das einen validen C-String abschließt. Wenn du jedoch deine Strings falsch zusammen baust, kann passieren das du kein 0-Byte am Ende hast. In diesem Fall musst du der Funktion noch einen Parameter String-Länge übergeben.
Dann noch Konzeptuell:
Da man ein PDU quasi Zeichen für Zeichen auswerten muss, würde ich eine Zustandsmaschine bauen und dann Zeichen für Zeichen auswerten. Das würde sogar die Möglichkeiten bieten, in quasi Echtzeit den PDU auszuwerten, wenn dieser über eine langsame serielle Schnittstelle kommt(9600 Baud und co.)
Redundanz macht wiederholen unnötig.
quod erat expectandum