Char Array zurück geben
-
Hey Leut,
ich glaub ich steh mächtig auf dem Schlauch,
ich will (eigentlich simpel) ein char Array zurück geben. Komm ich da nicht weiter.char* ext_path(char buff[]){ char path[ARRAY_SIZE] ={""}; int lenght; lenght = strlen(buff); for ( int i = 0; i <= 199; i++){ if( buff[i] == '='){ i = i+2; for ( int y = 0; y <= 199;y++){ path[y] = buff[i]; i++; } }//if }//for return path; }//ext_path /******************/ //AUFRUF void main bla... { char buff [ARRAY_SIZE] = {""}; char path [ARRAY_SIZE] = {""}; path[] = ext_path(buff); }
Kann sein das durch die runprobiererei jetzt Totalen Müll stehen hab aber der Sinn sollte ersichtlich sein!Die Array rückgabe mach ich viel zu selten
THX mal!
-
Man kann keine Arrays zurückgeben.
-
Du kannst dir einen Pointer auf das Array zurück geben lassen, oder Du verpackst das Array in ein struct und läßt den zurückgeben.
-
Und noch was, du erzeugst dein array Aufn Stack von deiner Funktion ... wenn die funktion den Scope verlaesst, ist auch dein Array weg, sprich dein zeiger, wenn dir den gemerkt hast, zeigt ins nirvana
Merke:
Gebe nie referenzen / Zeiger auf local aufm stack erzeugte Konstrukte zurueck !Loesung 1:
Erzeug dein array dynamisch ...Loesung 2. erzeug dein array, da wo du es brauchst, und lass deine funktion nur den Inhalt modifizieren ....
Ciao ...
-
Alternativ könnte man auch std::string verwenden
oder wenns ein anderer Datentyp als char ist vector<T>
-
Naja, vom Anblick seines Codes "erahne" ich, dass er in C programmiert
nen C++ Programmer wuerde:1. int main bla ... schreiben
2. strukturell doch etwas anders vorgehen ... (referenzen benutzen und kapseln )ciao ...
-
RHBaum schrieb:
nen C++ Programmer wuerde:
1. int main bla ... schreibenWie bitte? In C ist void main genauso falsch wie in C++
-
Dann war ich ja wohl doch nicht so weit von Schuß weg. Das mit der Rückgabe eines Arrays nicht klappt war klar, und mit dem pointer das der später ins Nirvana zeigt hab ich vermutet, eigentlich ja klar nach funktionsende!
Kann ich denn dann einfach mein Struct sofern ich es erstllt hab zurückgeben
wie ne variable?Hab noch nicht viel mit Vectoren gemacht, ist jetzt die Frage ob das hier nicht evtl einbischen übertrieben ist? Wollte ja eigentlich nur ein dummes array zurück geben.
Kann ich evtl noch was mehr über ein Dynamisches Array erfahren, glaube das sagt mir so wenig!!
P.S. Und wenn mir jetzt einer noch sagt warum ich
void main (void ){}
nicht schreiben soll. Klar gibt nix zurück ist ja wohl auch nicht zwingend erforderlich!!PP.S. Kapselung, Polymorphie, usw... Ist doch eigentlich nicht zwingend erforderlich für c++, oder sieht man das dann als c an?? wenn ich mit Funktionen anstatt Methoden arbeite?
-
Klar, wenn Du den struct erstellt hast, kannst Du die Daten darüber austauschen.
Du gibst die Struktur zurück, die eine Größe hat, was dann dahintersteht ist dem Programm relativ egal.struct text { char a[200]; }; text ext_path(char buff[]) { test path; int lenght; lenght = strlen(buff); for ( int i = 0; i <= 199; i++) { if( buff[i] == '=') { i = i+2; for ( int y = 0; y <= 199;y++) { path.a[y] = buff[i]; i++; } } } return path; } /******************/ //AUFRUF void main bla... { char buff [ARRAY_SIZE] = {""}; char path [ARRAY_SIZE] = {""}; test ausgabe; ausgabe = ext_path(buff); }
-
Seaco schrieb:
P.S. Und wenn mir jetzt einer noch sagt warum ich
void main (void ){}
nicht schreiben soll. Klar gibt nix zurück ist ja wohl auch nicht zwingend erforderlich!!Der Sprachstandard erlaubt es nicht, ganz einfach. Es gibt nur einige Compiler, die es trotzdem zulassen. Andere wieder streiken dann.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ
PP.S. Kapselung, Polymorphie, usw... Ist doch eigentlich nicht zwingend erforderlich für c++, oder sieht man das dann als c an?? wenn ich mit Funktionen anstatt Methoden arbeite?
Stimmt, du kannst C++ auch zunächst als besseres C verwenden (vor allem wenn du C kannst und neu in C++ bist). Aber irgendwann solltest du lernen, dein Werkzeug zu beherrschen. Komplexere Probleme kann man nur angehen, wenn man sie geistig vereinfacht, indem man unwesentliches ignoriert, d.h. indem man sie abstrahiert. Und die Abstraktionsmechanismen von C++ sind denen von C um einiges überlegen.
-
Seaco schrieb:
Hab noch nicht viel mit Vectoren gemacht, ist jetzt die Frage ob das hier nicht evtl einbischen übertrieben ist? Wollte ja eigentlich nur ein dummes array zurück geben.
Man nimmt IMHO nicht solange die dummen Sachen, bis man darüber stolpert, sondern solange die komfortablen, bis man aus irgendwelchen Gründen die dummen nehmen _muss_ - und ich denke, ein std::string ist hier wirklich komfortabler. Ich würde eher fragen: Ist hier ein rohes Array nicht übertrieben?
Und wenn dir die Dynamik von std::vector Angst macht, könntest du auch boost::array verwenden (www.boost.org). Das ist ein gewrapptes, statisches Array, das man auch kopieren, zuweisen und zurückgeben kann. Warum man das mit normalen C-Array nicht kann, weiß ich allerdings auch nicht so recht...