@Niji:

Du verstehst nicht wie man mit C-Feldern umgeht. Du versuchst ein Feld in ein anderes zu kopieren, indem du die Adresse, unter der das erste Feld erreichbar ist, zu der Adresse, unter der das zweite Feld erreichbar ist, änderst.
So interpretiert es nämlich der Compiler, obwohl deine tatsächliche Intention die ist, die Werte der Elemente des ersten Feldes gleich denen des zweiten zu setzen.

Der folgende Code zeigt wie man auf verschiedene Weisen eine tatsächliche Kopie eines Feldes erzielt:
Code:
#include <cstdlib>
// ...
char feld[10];
char copy[10];

// Möglichkeit 1 (elementweise Kopie)
for (int i = 0; i < 10; ++i)
    copy[i] = feld[i];

// Möglichkeit 2 (binäre Kopie mit memcpy)
memcpy(copy, feld, 10);

// Das wird nicht funktionieren!
copy = feld;
//...
Übrigens (mir ist nicht klar, ob es dir bewusst ist): Es ist egal, ob du den Parametertyp als 'char*', 'char[]', oder 'char[10]' deklarierst. In allen Fällen handelt es sich um einen Zeiger auf einen 'char' und die optionale Deklaration der Länge dient höchstens dem Leser als Dokumentation: "Ah, hier erwartet er ein Feld aus 'char's mit der Länge 10".

Zum weiteren Code will ich mich erstmal nur soweit äußern, dass er auf den ersten Blick wenig Sinn macht, angesichts dessen, was du mit dem Stack anstellst und deiner Menülogik. Ich denke, da gibt es noch weitere, nicht weniger gravierende Verständnisprobleme und vermute, dass du nach der Lösung des aktuellen Problems, noch mit weiteren konfrontiert sein wirst.