странная проблема printf с двумя неподписанными длинными int - PullRequest
1 голос
/ 07 сентября 2010

у меня есть этот код (я работаю с поддержкой больших файлов в ANSI C)

unsigned long int tmp,final
final=1231123123123213
tmp=final;
    printf("%llu %llu  \n",final,tmp);
    printf("%llu  \n ",tmp);

он печатает

1231123123123213 0
1231123123123213

я не понимаю

Ответы [ 3 ]

7 голосов
/ 07 сентября 2010

Спецификатор формата, используемый с unsigned long int, равен %lu. Вы используете %llu, который является спецификатором формата для unsigned long long int. Поведение вашего кода не определено.

Вы должны решить, что именно вы пытаетесь сделать. Либо используйте правильный спецификатор формата (для соответствия типу), либо используйте правильный тип (для соответствия спецификатору формата).

2 голосов
/ 07 сентября 2010

Потому что вы используете неправильный тип.

unsigned long long int tmp, final;

Компилятор должен пожаловаться на то, что числовая константа (литерал 1231123123123213) не соответствует длинному целому. Это усекается. Кроме того,% llu предназначен для печати длинных длинных, а не длинных целых;).

0 голосов
/ 07 сентября 2010

Вам нужно %lu, а не %llu.

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