2017-03-02 4 views
0

In meinem Code zu Warnung habe ich einen void * Zeiger erstellt, die einen Zeiger auf eine langePrinting Lange ohne

void *ret = (void *) (long) number); 

speichert Alles, was ich bin versucht, wird es Druck:

fprintf(stderr, "ld", ret); 

aber ich Bekomme die Warnung:

warning: format ‘%ld’ expects argument of type ‘long int’, but argument 4 has type ‘void *’ 

Ich muss leider die void * ret verwenden. Gibt es trotzdem etwas zu tun, um die Warnung zu vermeiden? Nach unzähligen Google-Suchen konnte ich keine Lösung finden. Vielen Dank!

+0

'fprintf (stderr, "ld", (long int) ret); ' –

+0

Warum werfen Sie es nicht so wie in der Deklaration? –

+1

Warum verwenden Sie einen Zeiger, um ein int zu speichern? –

Antwort

2
void *ret = (void *) (long) number); 

Dies ist ein Syntaxfehler.

Wenn es wirklich einen Zeiger auf eine long speichert, sieht es wie folgt aus:

long n = 42; 
void *ret = &n; 

Sie können es wie folgt drucken:

printf("%ld\n", *(long *)ret); 
1

nicht long, Druckzeiger statt drucken Sie - fprintf(stderr, "%p", ret)

-2

1: void *ret = (void *) (long) number);

Änderung: void *ret = (long*)&number;

2: fprintf(stderr, "ld", ret);

Änderung: fprintf(stderr, "%ld", *(long*)ret);

3: mein schlägt

Änderung es zu: long* ret = (long*) &number);fprintf(stderr, "%ld", *ret)

+1

Warum die Besetzung in '(long *) & Nummer'? – melpomene

+0

Sie müssen es nicht wirklich schreiben. der Compiler wird es trotzdem tun ... –