"Pointer Funktion" integer uebergeben?
-
hallo.
ich habe eine char Pointer Funktion und muss dieser nun eine Integer variable uebergeben.weiss jemand wie das geht?
sieht ungefaehr so aus : [/cpp]char *hallo(char *hal) {
...
return hal;
}
int main(int argc, char *argv[]) {int sers;
...
hallo(sers);
...
}
[cpp]und wenn ich das so mache wie es hier im Code steht,kommt beim compilieren : warning: passing argument 1 of 'hallo' makes pointer from integer without cast.
danke im Voraus.
-
Deine Funktion erwartet eine Adresse, also solltst du ihr auch eine Adresse geben.
Am besten wärs wohl so:
... int sers = 0; char hilf = sers; hallo(&hilf); ...
Allerdings wärs interesant, was deine Funktion macht. Nicht, dass sie eigentlich ein char-Array erwartet
-
danke,hat auch geklappt,..nur,dass jetzt die Funktion jetzt nicht starten will:( cmpiliert zwar ohne fehler,aber beim starten dann,faengt er diese Funktion garnet an.
char *hallo(char *hal){ char* s; ... s = (char*)malloc(256); while (1) { .... if (write(hal), s, strlen(s)+1) == -1) { /* bin mir hier mit dem write nicht sicher,ob ich das hal richtig uebergeben habe*/ perror("geht net"); break; } sleep(1); } if (close(hal) == -1) { /* genauso hier mit close und hal */ perror("geht auch nicht"); return NULL; */muss ich hier NULL zurueckgeben,hatte es naemlich als void Funktion,und dann gings ohne NULL nur return einfach*/ } free(s); return hal;/*da bin ich mir auch nicht sicher,ob ich return hal machen soll,denn offensichtlich nimmt er es gar nicht an*/ exit(0);
Programm startet zwar,will aber ueberhaupt nicht in die char *hallo Funktion hinein.
-
Du weißt aber schon, dass open(), write(), read() und close() etwas mit Dateiverarbeitung zu tun haben.
Was willst du mit deiner Funktion überhaupt machen?
-
bin ja nur mal drüber geflogen, aber ich glaube, das hier wollt ihr gar nicht
AJ schrieb:
... int sers = 0; char hilf = sers; hallo(&hilf); ...
, sondern ihr wollt doch die Ziffer die den Wert aus sers darstellt in eine char-Variable schreiben:
int sers = 0; char hilf = (char)(sers+48);//caution:0<sers<10 //oder: hilf = (char)(sers) + '0'; hallo(&hilf);
oder??
(ich hoffe, daß ich ier nicht wieder totalen nonsense verzapfe)
-
@freshman
Man kann es natürlich auch mit einem expliciten Cast schreiben ;).
-
Sonreir schrieb:
cmpiliert zwar ohne fehler,aber beim starten dann,faengt er diese Funktion garnet an.
char *hallo(char *hal){ ... if (write(hal, s, strlen(s)+1) == -1) {//hier war eine Klammer zu viel
das läßt sich compilieren? ich dachte write(...) erwartet als ersten Parameter ein int und hal ist Pointer auf char??
kann michda mal jemand aufklären??thanx'
-
@freshman
Ganz einfach:
Ein Pointer/Zeiger ist eigentlich nur eine Variable, die eine Speicheradresse beinhaltet. Der Datentyp dieser Variable ist unsigned int. Ist es dir jetzt klarer??
-
@AJ: hört sich logisch an. Ist aber doch ziemlich seltsam, oder (sers ist ja ein File-Handle)? Geht das denn mit so einer seltsame implizite casterei noch alles gut?
ist ja zum schießen: dh in meiner Sprache (Anfängersprache, da freshman) würde ich das dann so ausdrücken:
in sers speichert man den Wert 0
in hilf speichert man sers (den Wert 0), dh das Zeichen (NUL)
in hal steht Adresse von hilf, dh hal zeigt auf hilf
dann müßte ich aber doch mit (*hal) dereferenzieren, um auf den Inhalt von hilf zu kommen
der Inhalt von hilf ist das Zeichen (NUL) als int interpretiert der Wert 0
-
Ja mir kommt das ganze auch etwas seltsam vor. Darum auch dieser Post:
AJ schrieb:
Du weißt aber schon, dass open(), write(), read() und close() etwas mit Dateiverarbeitung zu tun haben.
Was willst du mit deiner Funktion überhaupt machen?
-
und was ist hier mit:
freshman schrieb:
dann müßte ich aber doch mit (*hal) dereferenzieren, um auf den Inhalt von hilf zu kommen
der Inhalt von hilf ist das Zeichen (NUL) als int interpretiert der Wert 0