Simple printf avec sizeof ne fonctionne pas à tous les
J'ai eu le plus simple le code pour afficher sizeof() d'un type de données, par exemple un int.
#include <stdio.h>
int main() {
printf('%i', sizeof(int));
}
Peu importe ce que je fais, par exemple, sizeof(int) en un entier, ou utiliser 'zu' au lieu de 'je', il me donne cette erreur:
error: invalid conversion from ‘int’ to ‘const char*’
Est-il quelque chose de mal avec mon compilateur? Je ne comprends pas pourquoi je ne peux pas imprimer un simple sizeof
..
EDIT: Il semble un printf('%s', 'foo');
ENCORE me dit que je suis la conversion int
à const char*
, comment sur terre??
- Ce n'est pas le C++ puis. En C++, un caractère littéral est de type
char
, pasint
. - Vote à fermer le plus simple faute de frappe.
printf
poursize_t
à: stackoverflow.com/questions/174612/...
Vous devez vous connecter pour publier un commentaire.
Essayer
print("%i", sizeof(int));
les guillemets manquants
Également explorer si vous pouvez utiliser cstdio au lieu de stdio.h si vous êtes sur le C++.
sizeof
àint
. Sinon, votre code sera briser sur 64 bits cibles.printf
pasprint
. Et vous devriez être en utilisant"%zu"
pour imprimer unsize_t
"%zu"
spécifications de conversion est GNU plus et n'est pas portable. Cette spécification de conversion fait partie de C99, mais ne sont pas inclus dans C++0x projet. Avec-pedantic
option du compilateur va se plaindre sur ce spécificateur.%zu
, pas%i
(c'est une valeur non signée, non pas un entier)Guillemets simples
'
sont utilisés pour délimiter les chaînes de caractères (typeint
en C), tandis que les guillemets doubles"
sont utilisés pour délimiter les chaînes de caractères littérales (de type "tableau dechar
" en C).printf
est déclarée comme suit:Donc vous essayez de passer un
int
où la fonction s'attend à unconst char *
ou quelque chose qui peut être converti àconst char *
.Remarque: En C++, les chaînes de caractères sont de type
char
, les littéraux de chaîne sont "tableau deconst char
".Il devrait être:
Il devrait être le double guillemets.
printf("%zu\n", sizeof(int));
ou " printf("%u\n", (unsigned)sizeof(int));`Vous êtes de passage le mauvais type d'argument et le code s'arrête sur 64 bits cibles.int
est toujours passé commeint
, même si leprintf()
fonction attend autre chose.size_t
!=int
en général, et il n'y a aucune garantie quesizeof(size_t) == sizeof(int)
, en particulier dans le 64-bits (non Windows) dans le monde. Sur little-endian (Intel) les machines, vous pouvez sortir avec, plus par hasard que la conception; en big-endian machines (SPARC, PPC), vous ne serez pas sortir avec elle - vous imprimer des zéros quand il y a une valeur, et les ordures dans les valeurs suivantes.