002
19.05.2006, 15:54 Uhr
RHBaum
|
was ich so auf anhieb sehe:
{ char stringtemp[81]; return stringtemp; }
du erstellst nen locales array of char fuer die funktion .... gibst nen zeiger drauf zurueck ....
nachdem aber die funktion fertig ist, und dein array local aufn stack der funktion liegt, wird das ding zurueckgespult und dein zeiger zeigt ins nirvana.
char* StringUmdrehen(char string[81],int laenge)
schon allein der prototyp der funktion laesst C entwickler erschauern ....
parameter 1, arrays loest er eh auf als was sie sind, als zeiger auf .... parameter 2 iss in ordnung, besser ist aber fuer groessenangaben die dafuer vorgesehenen typen zu nehmen. es sei denn man will explizit ungueltigkeitswerte verschieden von 0 haben .... aber das brauchst du doch ned. also besser size_t. und brauchen tust den eh nich, strings in c sind eh 0 terminiert -> reduntante info !
rueckabewert: char * ? nen zeiger auf was ? was temporaeres geht eh nicht .... was mit der funktion auf den heap anlegen, zeiger zurueckgeben, und hoffen das der anwender es loescht, dazu ne doku mit 1000 Ausrufezeichen schreiben -> ganz schlechter Stil !
und warum auch ... dein parameter 1 ist doch nich const, also schreib direkt drauf !
besserer prototyp waere: int StringUmdrehen(char * mystring); den rueckabewert als fehlernummer/erfolgsmeldung verwenden.
falls du den organialstring nicht anfassen willst darfst, musst ihn aufm buffer schreiben lassen, den auserhalb der funktion natuerlich anlegen laesst:
int StringUmdrehen(const char * input, char * output,size_t * output_size);
outputsize beim vorm aufrufen wird mit der groesse von output als buffer belegt, nach der funktion koenntest da reinschreiben wieviel zeichen du in output geschrieben hasst, iss aber unnoetig, weil das koenntest in den rueckabewert packen oder die laenge von autput (suche nach termination) selber checken ....
Hoffe das war bisserl verstaendlich ! ^^
Ciao ... |