Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Arrays (Anfängerfragen)

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Benni
Gast





BeitragVerfasst am: 02. Feb 2001 17:46   Titel: Arrays (Anfängerfragen)

Moin!

Ich habe 2 Anfängerfragen bezüglich Arrays, die mich zum verzweifeln bringen.

1.
Warum kann ich keine Array lokal deklarieren?
Wenn ich das tue spielt das Programm verrückt.
Wenn ich dagegen das Array global deklariere, läuft alles so wie es soll.

2.
Wie weise ich dem Rückgabewert einer Funktion, ein Array zu?

Das hier funktioniert natürlich nicht:
--
char array[]="Hallo";

char funktion()[]
{
return array;
}
--
Meine ganzen Probleme haben bestimmt was mit Zeigern zu tun, oder?

Hoffentlich kann mir jemand helfen.
Vielen Dank

Benni
 

kyle



Anmeldungsdatum: 30.01.2001
Beiträge: 14

BeitragVerfasst am: 03. Feb 2001 3:08   Titel: Re: Arrays (Anfängerfragen)

Zum Thema Rückgabe wert

char array[] = "Hallo";

char* foo()
{
return array;
}

Obwohl man arrays nicht Global definieren sollte.

Zu deinem 2. Problem, kann ich mal ein Codeausschnitt sehen, dann kann ich dir helfen Smile
_________________
Warum durchs Fenster gehen, wenn die Tür offen steht?


Zuletzt bearbeitet von kyle am 03. Feb 2001 3:08, insgesamt 1-mal bearbeitet
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 03. Feb 2001 14:27   Titel: Re: Arrays (Anfängerfragen)

Hi,

soso, man sollte Arrays nicht global definieren. Woher hat der Herr diese Weisheit?

@Benni: So wie sie dasteht, ist die Funktion korrekt. Nur die Schreibweise ist etwas ungewöhnlich. Da Arrays in C nichts weiter sind als ein Zeiger auf das erste Element, schreibt man normalerweise:

char* funktion()
{
return array;
}

Warum geht es schief, wenn du das Array lokal definierst? Weil man nie, *nie* einen Zeiger auf eine lokal definierte Variable zurückliefern darf, es sei denn, die Variable ist als static deklariert. Eine lokale Variable wird nämlich auf dem Stack angelegt und ist nicht mehr verfügbar, sobald die Funktion zur aufrufenden Funktion zurückkehrt. Und dann macht es Bumm. Leider meistens nicht sofort.

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Benni
Gast





BeitragVerfasst am: 03. Feb 2001 19:18   Titel: Re: Arrays (Anfängerfragen)

Hey! Vielen Dank!

So funkts:

char* foo()
{
return array;
}

So nicht:
char[] foo()
{
return array;
}

Dort bricht der Compiler mit ner Fehlermeldung ab. Komisch...

Es ist nur blöd das ich, daß Array global definieren muss.
Leider kann ich es nicht statisch machen...

Was tut man da?
Ich kann doch keine möglichen Namenskonflikte in Kauf nehmen, wenn ich die Funktionen in eine Header Datei bringe!

Trotzdem vielen Dank!
Ihr habt mir gut weitergeholfen.

Benni
 

Sebastian Ude
Gast





BeitragVerfasst am: 03. Feb 2001 22:38   Titel: Re: Arrays (Anfängerfragen)

Naja eine Funktion als:

char[] foo() zu definieren ist echt etwas ungewöhnlich.
Denk daran das ein Array nichts weiter als ein Pointer auf den ersten Wert aus einer Folge von Werten ist.


Dann ... wie kommst du darauf dass du ein Array nur global definieren kannst ?

Poste doch bitte mal deinen Code hier, dann können wir vielleicht sehen was du da falsch machst / falsch verstehst.
 

Benni
Gast





BeitragVerfasst am: 03. Feb 2001 23:42   Titel: Re: Arrays (Anfängerfragen)

Klar, kann man ein Array lokal definieren.
Das ging bei mir nur zuerst nicht, weil ich die Funktion unter der Funktion hatte und sie nicht impliziet deklariert hatte.

Aber...
Ich kann ein lokal definiertes Array nicht der Funktion als Rückgabewert übergeben.
Dies hatte HJB ja oben auch anschaulich erklärt, warum es so nicht geht.
Aber es muss doch eine Möglichkeit geben das ich den Inhalt des Arrays zurückgeben kann.

Codeausschnitt:

char numbertable[36] = {'0','1','2','3','4','5','6','7','8','9',\
'A','B','C','D','E','F','G','H','I','J',\
'K','L','M','N','O','P','Q','R','S','T',\
'U','V','W','X','Y','Z'};

char ergebniss_string[]="";

char* dez_to_system(int zahl,int ziel_system)
{
int rest=0,i=0;

do {
rest=zahl%ziel_system;
zahl/=ziel_system;

ergebniss_string = numbertable[rest];
i++;

} while(zahl);
ergebniss_string='\0';
strswap(ergebniss_string); /* Dreht den String um */
return ergebniss_string;
}

Funktioniert ja auch, nur das ergebniss_string global ist.

Gruss
 

kyle



Anmeldungsdatum: 30.01.2001
Beiträge: 14

BeitragVerfasst am: 04. Feb 2001 12:25   Titel: Re: Arrays (Anfängerfragen)

Brauchst du doch nicht reich doch einfach immer ein char Pointer durch Smile
Ein Array kannst du entweder in einer Funktion durch

1. char foo1[10];
definieren der array geht aber nach verlassen der Funktion verloren oder durch

2. char* foo2 = (char*) calloc(sizeof(char),10); (gibt einen void* von 10 char zurück der auf char* gecasted wird um ihn zuzuweisen und mit 0 initialisiert wird. (bei malloc müsstest du das machen)

Das ist ein Pointer den du beliebig durch dein Programm reichen kannst und nur obendwann wenn er nicht mehr benötigt wird duch free() zustören mußt.
_________________
Warum durchs Fenster gehen, wenn die Tür offen steht?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

Benni
Gast





BeitragVerfasst am: 04. Feb 2001 16:04   Titel: Re: Arrays (Anfängerfragen)

Klar, klingt logisch. :)

Ich hänge einfach noch immer zu sehr an der Pascal denkweise fest.

Jetzt funktionierts!!
Schade nur, daß man dem Array eine feste Grösse zuweisen muss.

Na ja, vielen Dank an Euch alle!

Benni
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy