2010-09-22 14 views
5

Ho ottenuto il codice più semplice per visualizzare sizeof() di un tipo di dati, ad esempio un int.Semplice printf con sizeof non funziona affatto

#include <stdio.h> 
int main() { 
    printf('%i', sizeof(int)); 
} 

Non importa quello che faccio, come ad esempio mettere sizeof (int) in un intero, o utilizzare 'zu' invece di 'i', mi porge questo errore:

error: invalid conversion from ‘int’ to ‘const char*’ 

C'è qualcosa di sbagliato con il mio compilatore? Non capisco perché non posso stampare ad una semplice sizeof ..

EDIT: Mi sembra un printf('%s', 'foo'); ANCORA mi dice che sono la conversione int a const char*, come sulla terra ??

+0

Questo non è C++ allora . In C++, un carattere letterale è di tipo 'char', non' int'. – sbi

+0

Votare per chiudere come semplice errore di battitura. 'printf' per' size_t' a: http://stackoverflow.com/questions/174612/cross-platform-format-string-for-variables-of-type-size-t –

risposta

6

Prova print("%i", sizeof(int));

doppi apici manca

esplorare anche se è possibile utilizzare cstdio invece di stdio.h se siete su C++.

+0

Grazie, stavo codificando in PHP per troppo tempo .. Continuo a dimenticare le virgolette singole non sono per archi .. Grrr. – John

+1

@John: Guarda la risposta di @Richard Cook. Spiega perché hai ricevuto l'errore. Questa è una grande opportunità per imparare !. – Chubsdad

+1

Correggi il tipo o metti il ​​risultato di 'sizeof' in' int'. Altrimenti il ​​tuo codice si romperà su target a 64 bit. –

8

apici ' sono utilizzati per delimitare letterali carattere (tipo int in C) mentre virgolette " servono a delimitare stringhe (tipo "vettore di char" in C).

printf è dichiarato come segue:

int printf (const char * format, ...) 

Così si sta tentando di passare un int in cui la funzione si aspetta un qualcosa const char * o che può essere convertito in const char *.

Nota: nei caratteri letterali C++ digitare char, i valori letterali stringa sono "array di const char".

+1

Apprezzate spiegando anche il motivo: + 1 – Chubsdad

1

Dovrebbe essere:

printf("%i\n", sizeof(int)); 

Dovrebbe essere i doppi apici.

+3

No, dovrebbe essere 'printf ("% zu \ n ", sizeof (int));' or 'printf ("% u \ n ", (senza segno) sizeof (int)); '' Stai passando il tipo di argomento sbagliato e il codice si interromperà su target a 64 bit. –

+0

Ma vi darà solo un avvertimento lì. Si lancia automaticamente. – antonio081014

+0

Avviso a.k.un errore (99,99% delle volte), automaticamente (è il rimanente 0,01%) – Chubsdad

5
printf("%zu", sizeof(int)) 
  • printf, non stampare
  • %zu, non %i (è un valore senza segno, non un intero)
  • virgolette, non virgolette singole