Array an Funktion übergeben
-
Hallo,
kann mir bitte jemand sagen wie ich einen Array an eine Funktion übergeben kann?
Ich möchte einen Char Array mit 10 Elementen einlesen, und den gesamten Inhalt des Arrays an eine andere Funktion übergeben!
Leider funktioniert das bei mir noch nicht richtig, ich bekomme keinen compiler error sondern ers beim linken!
Linking...
main.obj : error LNK2001: unresolved external symbol "int __cdecl Gross(char)" (?Gross@@YAHD@Z)
Debug/test1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.test1.exe - 2 error(s), 0 warning(s)
und so (im groben) sieht der Code aus:
Gross(c_String[10]); //Aufruf der Funktion int Gross(char c_String[10]) //Die Funktion { int i_High=0;; for (int i=0;i<sizeof c_String;i++) { i_High++; } return i_High; }
Edit by AJ: Code-Tags eingefügt (beim nächsten mal bitte selber dran denken ;))
-
Sieht so aus, als ob du ein einzelnes Zeichen (char) an eine Funktion übergibst, die ein Array erwartet. Um das gesamte Array zu übergeben, lässt du besser die Indexangabe weg:
int Gross(char* str, int size=0) //ist etwas besser als char str[10], weil's auch andere Größen verarbeiten kann { if(size==0) size=strlen(str); //... } int main() { char c_string[10]; //... Gross(c_string); //bearbeite gesamten String Gross(c_string+2,2);//bearbeite Zeichen 3 und 4 des Strings }
-
@christianCK
Was soll deine Funktion eigentlich machen?Bei sizeof() musst du immer etwas aufpassen. In deinem Coding kommt immer 10 raus. Das liegt aber nur daran, dass dein Parameter auch die feste Größe 10 bekommen hat. Wenn du allerdings einen Zeiger als Parameter verwendest (so wie bei CStoll), dann schaut sizeof() nicht auf den Speicherbedarf des Arrays, sondern auf den des Zeigers. Im Falle eines 32Bit-Systems (dass du wahrscheinlich auch benutzt) würde dann immer 4 rauskommen, da ein Zeiger immer den Datentyp int hat.
CStoll schrieb:
int Gross(char* str, int size=0)
Hier sollte man noch dazusagen, dass das nur mit einem C++-Compiler funktioniert
-
AJ schrieb:
Bei sizeof() musst du immer etwas aufpassen. In deinem Coding kommt immer 10 raus. Das liegt aber nur daran, dass dein Parameter auch die feste Größe 10 bekommen hat. Wenn du allerdings einen Zeiger als Parameter verwendest (so wie bei CStoll), dann schaut sizeof() nicht auf den Speicherbedarf des Arrays, sondern auf den des Zeigers.
Deswegen habe ich ja strlen() verwendet, um die Länge des übergebenen Feldes zu ermitteln (das funktioniert allerdings nur mit nullterminierten char-Arrays, bei einer anderen Darstellung mußt du die Größe mitliefern).
Im Falle eines 32Bit-Systems (dass du wahrscheinlich auch benutzt) würde dann immer 4 rauskommen, da ein Zeiger immer den Datentyp int hat.
Falsch - ein Zeiger ist KEIN int, er kann höchstens die selbe Größe haben (das hängt vom Compiler und System ab).
CStoll schrieb:
int Gross(char* str, int size=0)
Hier sollte man noch dazusagen, dass das nur mit einem C++-Compiler funktioniert
Sorry, das hätte ich eventuell erwähnen müssen. Bei einem C-Programm kannst du keinen Default-Parameter angeben.
(Aber ein C-Compiler hätte vermutlich einen Fehler wegen unpassender Typen ausgespuckt statt des Linker-Fehlers)
-
CStoll (off) schrieb:
Im Falle eines 32Bit-Systems (dass du wahrscheinlich auch benutzt) würde dann immer 4 rauskommen, da ein Zeiger immer den Datentyp int hat.
Falsch - ein Zeiger ist KEIN int, er kann höchstens die selbe Größe haben (das hängt vom Compiler und System ab).
Ich wollte es einfach nur einfach ausdrücken ;). Genaugenommen sollte ein Zeiger immer dem Datentypen unsigned int entsprechen, d.h. ein Zeiger hat auf jeden Fall die Größe eines unsigned int oder auch einfach nur int (hat ja die gleiche Größe). Wenn das bei einem Compiler anders ist, dann mach ich mir ernsthaft Gedanken, ob der Compiler standardkonform ist und ob man diesen verwenden sollte. Vom System ist nur die genaue Größe des Datentyps abhängig.
-
AJ schrieb:
Genaugenommen sollte ein Zeiger immer dem Datentypen unsigned int entsprechen, d.h. ein Zeiger hat auf jeden Fall die Größe eines unsigned int oder auch einfach nur int (hat ja die gleiche Größe). Wenn das bei einem Compiler anders ist, dann mach ich mir ernsthaft Gedanken, ob der Compiler standardkonform ist und ob man diesen verwenden sollte.
In welchem Abschnitt des Standard steht denn das? Soweit ich weiß, gibt es keine Beschränkungen für die Größe eines Pointers.