Почему эта программа обрезает вывод? - PullRequest
1 голос
/ 10 ноября 2010

Я что-то не так делаю в этой следующей программе?

код

    #include <stdio.h>
int main()
{
long x=1290323123123;
int len = snprintf(NULL,0, "%ld", x);

printf("%ld  %ld",x,len);

 return 0;
}

Выход: 1832934323 10

Ответы [ 2 ]

6 голосов
/ 10 ноября 2010

1290323123123 требуется 41 бит для хранения, но это long, вероятно, просто 32-битная длина, поэтому лишние 9 битов пропали.чтобы убедиться, что тип имеет длину не менее 64 бит, чтобы он мог полностью сохранить это значение (результат: http://www.ideone.com/BnTjJ).

2 голосов
/ 10 ноября 2010

Ваш тип 'long' может содержать только 4 байта.Значение, которое вы присвоили 'x', больше, чем 4 байта.

Hex(1290323123123) = 12C 6D40 5BB3
Hex(1832934323 ) = 6D40 5BB3 

Таким образом, выводимое число совпадает с младшими 4 байтами числа, которое вы пытаетесь напечатать.

Некоторые компиляторы могут иметь более длинные «длинные» типы - доC99 и введение таких типов, как int64_t Я не думаю, что существует один стандарт для пар (имя, размер).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...