2010-09-22 11 views
5

Ich habe den einfachsten Code, um sizeof() eines Datentyps anzuzeigen, sagen ein int.Einfache printf mit sizeof funktioniert überhaupt nicht

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

Egal was ich tue, wie Put-sizeof (int) in eine ganze Zahl, oder verwenden Sie 'zu' anstelle von 'i', reicht es mir diesen Fehler:

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

Gibt es stimmt etwas nicht mit meinem Compiler? Ich verstehe nicht, warum ich nicht eine so einfache sizeof drucken kann ..

EDIT: Es scheint ein printf('%s', 'foo'); STILL sagt mir, ich int zu const char*, wie auf der Erde bin Umwandlung ??

+0

Dies ist nicht C++ dann . In C++ hat ein Zeichenliteral den Typ 'char', nicht' int'. – sbi

+0

Abstimmung zum Schließen als einfacher Tippfehler. 'printf' für' size_t' unter: http://stackoverflow.com/questions/174612/cross-platform-format-string-for-variables-of-types-size-t –

Antwort

6

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

doppelte Anführungszeichen Versuchen ist

Erkunden Sie auch fehlen, wenn Sie cstdio statt stdio.h verwenden können, wenn Sie auf C++.

+0

Danke, ich hatte in PHP programmiert zu lange .. Ich vergesse immer wieder einzelne Anführungszeichen sind nicht für Strings .. Grrr. – John

+1

@ John: @Richard Cook Antwort betrachten. Es erklärt, warum Sie den Fehler bekommen haben. Das ist eine großartige Gelegenheit zu lernen !. – Chubsdad

+1

Korrigieren Sie den Typ oder geben Sie das Ergebnis von 'sizeof' in' int' um. Andernfalls wird Ihr Code bei 64-Bit-Zielen unterbrochen. –

8

Hochkommata ' verwendet werden, um Zeichenliterale (Typ int in C) abgrenzen, während doppelte Anführungszeichen " werden verwendet, um Zeichenketten (Typ „Array von char“ in C) abgrenzen.

printf erklärt sich wie folgt:

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

So versuchen Sie eine int passieren, wo die Funktion einen const char * oder etwas erwartet, die const char * umgewandelt werden können.

Hinweis: In C++ Zeichenliterale sind Typ char, Zeichenfolge Literale sind "Array von const char".

+1

Schätzen Sie auch den Grund: + 1 – Chubsdad

1

es sein sollte:

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

Es soll die doppelten Anführungszeichen sein.

+3

Nein, es sollte 'printf ("% zu \ n ", sizeof (int));' oder 'printf ("% u \ n ", (vorzeichenlose) sizeof (int)); '' Sie übergeben die falsche Art von Argument und der Code wird auf 64-Bit-Zielen brechen. –

+0

Aber es gibt Ihnen nur eine Warnung dort. Es wird automatisch umgewandelt. – antonio081014

+0

Warnung a.k.a Fehler (99,99% der Fälle), automatisch (ist der verbleibende 0,01%) – Chubsdad

5
printf("%zu", sizeof(int)) 
  • printf, Druck nicht
  • %zu, nicht %i (es ist ein Wert ohne Vorzeichen, nicht eine ganze Zahl)
  • doppelte Anführungszeichen, nicht Hochkommata