int *
-
hallo.
habe dieses beispiel aus einem c-lehrbuch:
/* bspl0060.c */ #include <stdio.h> main() { int a=15,b=22; double c=10.0, d=234.52; printf("\nAdresse von a = %u ",&a); printf("Wert von a = %i ",a); printf("\nAdresse von b = %u ",&b); printf("Wert von b = %i ",b); printf("\nAdresse von c = %u ",&c); printf("Wert von c = %f ",c); printf("\nAdresse von d = %u ",&d); printf("Wert von d = %f ",d); printf("\n\n"); }
Folgender Fehler erscheint:
bspl0060.c: In Funktion »main«: bspl0060.c:7: Warnung: format »%u« erwartet Typ »unsigned int«, aber Argument 2 hat Typ »int *« bspl0060.c:9: Warnung: format »%u« erwartet Typ »unsigned int«, aber Argument 2 hat Typ »int *« bspl0060.c:11: Warnung: format »%u« erwartet Typ »unsigned int«, aber Argument 2 hat Typ »double *« bspl0060.c:13: Warnung: format »%u« erwartet Typ »unsigned int«, aber Argument 2 hat Typ »double *«
Kann mir jemand sagen, was hier der Fehler ist? Steht nämlich genau so in dem Buch drinnen.
Danke
-
Mach mal
printf("\nAdresse von a = %p ",&a);
etc.
-
dankeschön für die schnelle antwort, funktioniert jetzt.
-
oder
printf("\nAdresse von a = % ",(unsigned int) &a);
usw.
-
Der Compiler sagt es doch. %u ist für unsigned int. %p wäre für &a.
Siehe http://www.cplusplus.com/reference/clibrary/cstdio/printf/.
Mag sein, dass nicht jeder Compiler eine Warnung ausgibt und es deshalb nicht auffällt. Oder der Zeiger bei Compiler X einfach den Typ unsigned int hat.
-
und statt:
printf("Wert von a = %i ",a);
machst du:
printf("Wert von a = %u\n", a);
-
%u natürlich anstelle von % ...
-
Belli schrieb:
%u natürlich anstelle von % ...
ja, is klar, ne.
-
BUZZ schrieb:
und statt:
printf("Wert von a = %i ",a);
machst du:
printf("Wert von a = %u\n", a);Nee, das machst Du besser nicht. a ist ein signed int und kein unsigned int.
-
Belli schrieb:
Nee, das machst Du besser nicht. a ist ein signed int und kein unsigned int.
mist, ich idiot, hast recht.
ich geh mal lieber ne stunde pennen.