Если вы не получаете ожидаемые текстовые значения, это возможно из-за того, что вы используете неправильные спецификаторы формата (я предполагаю, что вы заполнили переменные, которые вы пытаетесь напечатать здесь, хотя вы можете это подтвердить).
%llu
явно для unsigned long long int
, который не обязательно равен ширине uint64_t
.
В C99 inttypes.h
содержит макросы для спецификаторов формата, которые будут использоваться для типов данных с точной шириной и по меньшей мере как ширина.
Например:
uint64_t xyzzy = 42;
printf ("Number is: %" PRIu64 "\n", xyzzy);
В этом случае PRIu64
означает спецификатор формата printf
, десятичный вывод без знака, для 64-битной переменной точной ширины. Существует множество других типов для различных типов вывода, а также эквиваленты для семейства scanf
(начиная с SCN
).
Раздел 7.8.1 Macros for format specifiers
из C99 перечисляет их подробно.
На основании вашего обновления, когда вы не получаете неправильные номера, а получаете то, что можно было бы назвать только мусором, я бы сказал, что ваши проблемы лежат в другом месте. Даже с поврежденными указателями или данными я бы не ожидал, что fprintf
будет генерировать нечисловые данные для строк числового формата. Это, конечно, возможно , поскольку это неопределенное поведение, но очень маловероятно.
Вы могли бы получить такой вывод для строк, но здесь это не так.
Другими словами, я думаю, вы должны искать в другом месте своего кода (в качестве примера) проблемы повреждения памяти.
Единственное, что вы можете сделать, чтобы проверить, лежит ли проблема в той строке, которую, по вашему мнению, имеет место, - это изменить ее на:
printf("DEBUG: %llu,%u\n",poly->start,poly->length);
fprintf(out_file, "%llu,%u",poly->start,poly->length);
и посмотрите, что выходит на терминал.