2010-09-22 5 views
5

Obtuve el código más simple para mostrar sizeof() de un tipo de datos, digamos un int.La impresión simple con sizeof no funciona en absoluto

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

No importa lo que haga, como sizeof put (int) en un entero, o utilizo 'zu' en lugar de 'i', que me da este error:

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

¿Hay algo mal con mi compilador? No entiendo por qué no puedo imprimir un simple sizeof ..

editar dicho: Parece un printf('%s', 'foo'); TODAVÍA me dice que estoy convirtiendo int a const char*, cómo en la tierra ??

+0

Esto no es C++ entonces . En C++, un carácter literal es de tipo 'char', no' int'. – sbi

+0

Votando para cerrar como un simple error tipográfico. 'printf' for' size_t' en: http://stackoverflow.com/questions/174612/cross-platform-format-string-for-variables-of-type-size-t –

Respuesta

6

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

comillas dobles no se encuentra

explorar también si se puede utilizar en lugar de cstdio stdio.h si se encuentra en C++.

+0

Gracias, he estado codificando en PHP por demasiado tiempo ... sigo olvidando que las comillas simples no son para cuerdas .. Grrr. – John

+1

@John: Mire la respuesta de @Richard Cook. Va a explicar por qué recibiste el error. ¡Esa es una gran oportunidad para aprender !. – Chubsdad

+1

Corregir el tipo o convertir el resultado de 'sizeof' en' int'. De lo contrario, su código se dividirá en objetivos de 64 bits. –

8

comillas simples ' se utilizan para delimitar caracteres literales (tipo int en C), mientras comillas dobles " se utilizan para delimitar los literales de cadena (tipo "array de char" en C).

printf se declara como sigue:

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

Así que están tratando de pasar una int donde la función espera un const char * o algo que se puede convertir en const char *.

Nota: En C++ los literales de los caracteres son del tipo char, los literales de las cadenas son "matriz de const char".

+1

Apreciar también la explicación del motivo: + 1 – Chubsdad

1

Debería ser:

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

Cabe las comillas dobles.

+3

No, debe ser 'printf ("% zu \ n ", sizeof (int));' o 'printf ("% u \ n ", (unsigned) sizeof (int)); '' Estás pasando el tipo de argumento incorrecto y el código se dividirá en objetivos de 64 bits. –

+0

Pero solo le dará una advertencia allí. Se lanzará automáticamente. – antonio081014

+0

Advertencia a.k. un error (99.99% de las veces), automáticamente (es el remanencia 0.01%) – Chubsdad

5
printf("%zu", sizeof(int)) 
  • printf, no imprimir
  • %zu, no %i (que es un valor sin signo, no un número entero)
  • comillas dobles, no comillas simples
Cuestiones relacionadas