2016-06-16 3 views
0

Я попытался оператора SizeOf (VS код, Mac)Что не так с моим оператором sizeof?

#include <stdio.h> 

int main() 
{ 
    char i; 
    int j; 
    double k; 

    printf("%d\n", sizeof(i)); 
    printf("%d\n", sizeof(j)); 
    printf("%d\n", sizeof(k)); 

    return 0; 
} 

но предупреждение говорит:

warning: format specifies type 'int' but the argument has type 'unsigned long' [-Wformat] 
printf("%d\n", sizeof(k)); 
     %lu 

Что не так? Я думаю, что нет ничего плохого в синтаксисе, и он показывает мне результат.

+0

Является ли это C++ вопрос, или C или что-то еще? Добавьте языковой тег. –

ответ

0

С оператором sizeof ничего не случилось.
Вы используете неправильный спецификатор для printf.

sizeof возвращает size_t.
Фактический тип size_t определяется реализацией.
Таким образом, %z правильно спецификатор для печати size_t

Использование printf("%zu\n", sizeof(k));

+0

Я не уверен, поддерживает ли Microsoft '% zu', поэтому, если это не работает, то другой параметр -' printf («% d \ n», (int) sizeof i); ' –

+1

Он также выглядит как компилятор OP предлагает «% lu». –

+0

«% zu», «% lu» и «(int) sizeof» все работают на меня. Благодарю. –

Смежные вопросы