Ausgabe+=myArray[i]+'\n'
DAS geht so leider nicht, in reinem C gibt es keine dynamischen Strings, du müsstest also entweder hybrid mit ein bisschen C++ und String als Klasse arbeiten oder deine "Ausgabe" als Array bestimmter größe Vorinitialisieren damit genug Platz reserviert ist um alle Zeichen aufnehmen zu können.

Es gibt Funktionen wie strncat und co. aber ein simples Ausgabe+=irgendwas+"noch was statisches"; dürfte dir dein compiler eigentlich schon um die Ohren hauen.

http://www.cplusplus.com/reference/cstring/strtok/

strtok sucht halt nach dem übergebenen token und gibt dir einen Pointer innerhalb des char arrays den du dann mittels memcpy oder strcpy (oder strncpy) in ein anderes array kopieren kannst (gibt aber auch diverse andere string methoden in c)

Aber
Das kann ich aber nur, wenn ich eben genau weiß, welche Funktion was genau zurückgibt und erwartet.
Das ist die Kunsst zu googeln oder man holt sich ein gutes Buch mit inhaltsverzeichnis wenn man offline arbeiten will. Ich kann dir auch nciht aus dem FF sagen welche Funktion wie zu bedienen ist und Methoden die ich vor 3 Jahren verwendet habe muss ich auch heute immer noch nachschlagen weil man sich nciht alles merken kann. Es ist aber immer gut in Bild im Kopf zu haben wie der Speicher verawltet wird statt sich nur auf die Verwendung der EMthoden zu konzentrieren!

Ich schreib hier mal nur meine persönliche Sichtweise auf nach der ich arbeite bzw. wie ich es mir vorstelle wenn ich von einem single Thread Prozess ausgehe oder wie es halt im µController tickt, solange ich keine Interrupts einsetze!

JEDER Variable die ich anlege, wird beim compilieren vom Linker im RAM eine feste Position vorgegeben (Optimierung lasse ich mal außen vor).
Diese Variablen haben dann eine feste Größe und im Fall von Arrays sind das dann halt N viele Variablen hintereinander.

Wenn ich dynamisch arbeiten will muss sich jemand (im Fall von C ich selbst) darum kümmern diesen Platz zu reservieren und auch wieder freizugeben!

Wenn ich aber nciht mit malloc, calloc und free arbeiten möchte (ist halt absolut pain in the butt) muss ich halt entsprechend große Puffer Arrays vorhalten in denen ich dann arbeite und mir meine Ergebnisse dann irgendwo hin kopieren.

Wenn Interrupts oder Multithreading dazu kommen wirds nochmal spannender, dann musst du sicherstellen dass eine Schleife die in einem Arrray etwas macht nicht z.B. durch einen Interrupt unterbrochen wird, in welchem neue DAten ins Array geschrieben werden.

Wenn ich jetzt mal Java als Referenz nehme, wenn ich eine Liste von Bytes habe (als Ersatz für das char Array) und über diese mit einem Iterator (intelligenter Pointer der sich selbst weiterschieben kann) zugreife, dann aber ein anderer Prozess diese Liste manipuliert, schmiert mir der nächste Zugriff auf den Iterator mit der "Concurrent Modification" Exception ab, also Konkurrierender Zugriffsfehler.

In Java kann man dann das Modell der Liste ändern und eine Threadsafe Implementation nehmen ... im Einfachsten Fall wird eine Kopie deiner Liste erzeugt, über die der Iterator läuft, während die eigentlichen Daten verändert werden können. du kannst dann nur nicht erwarten, dass der Iterator sich ebenfalls verändert.

in C++ nimmt man die String Klasse, weil diese bereits dynamischen Speicher einsetzt (Aber immernoch das Problem mit "new" und "delete" hat statt malloc und free)

Oder man kann die auto:: pointer (das leerzeichen ist nur weil er sonst einen smiley draus macht) library benutzen (bim Namen bin ich mir nicht sicher) weil dir dort viel Arbeit abgenommen wird.

Strings in C sind gruselig finde ich persönlich.